首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用nginx反向代理在同一端口上从http重定向到https

如何使用nginx反向代理在同一端口上从http重定向到https
EN

Stack Overflow用户
提问于 2013-03-15 17:44:28
回答 4查看 38.3K关注 0票数 42

我在Nginx中使用反向代理,并且我想强制将请求转换为HTTPS,所以如果用户想要通过http访问url,他将被自动重定向到HTTPS。

我还使用了一个非标准的端口。

下面是我的nginx反向代理配置:

代码语言:javascript
复制
server {
    listen 8001  ssl;
    ssl_certificate /home/xxx/server.crt;
    ssl_certificate_key /home/xxx/server.key;
    location / {
        proxy_pass https://localhost:8000;
        proxy_redirect off;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Ssl on;
        proxy_set_header  X-Forwarded-Proto  https;
    }
}

我尝试了很多方法,也阅读了关于它的文章,包括this serverfault question,但到目前为止还没有起作用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-15 23:09:41

找到了一些运行良好的东西:

代码语言:javascript
复制
server {
        listen 8001  ssl;
        ssl_certificate /home/xxx/server.crt;
        ssl_certificate_key /home/xxx/server.key;
        error_page 497 301 =307 https://$host:$server_port$request_uri;
        location /{
            proxy_pass http://localhost:8000;
            proxy_redirect off;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Ssl on;
        }
}
票数 91
EN

Stack Overflow用户

发布于 2013-03-15 19:21:04

您确定您的解决方案有效吗?它正在侦听8001 ssl。它会接受http请求吗?

我这样做:

代码语言:javascript
复制
server {
    listen   80;
    server_name  yourhostname.com;

    location / {
            rewrite ^(.*) https://yourhostname.com:8001$1 permanent;
    }
}

然后是你的配置:

代码语言:javascript
复制
server {
    listen 8001  ssl;
    ssl_certificate /home/xxx/server.crt;
    ssl_certificate_key /home/xxx/server.key;
    location / {
        proxy_pass https://localhost:8000;
        proxy_redirect off;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Ssl on;
        proxy_set_header  X-Forwarded-Proto  https;
    }
}
票数 4
EN

Stack Overflow用户

发布于 2018-06-07 04:28:33

这对我很有效:

代码语言:javascript
复制
server {
listen       80;
server_name  localhost;
...
if ($http_x_forwarded_proto = "http") {
      return 301 https://$server_name$request_uri;
}
location / {
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://localhost:8080;
}

...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15429043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档