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

rbi*_*ock 38 ssl proxy reverse-proxy nginx

我使用Nginx的反向代理,我想强制请求进入HTTPS,因此如果用户想要使用http访问该URL,他将自动重定向到HTTPS.

我也使用非标准端口.

这是我的nginx反向代理配置:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多东西并且还阅读了有关它的帖子,包括这个服务器故障问题,但到目前为止还没有任何工作.

rbi*_*ock 69

发现一些运作良好的东西:

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;
        }
}
Run Code Online (Sandbox Code Playgroud)

  • 错误代码497是专门为此用例创建的[在从http到https的同一端口上重定向].我认为这是最好的答案.http://wiki.nginx.org/HttpSslModule#Nonstandard_error_codes (12认同)
  • 我会考虑添加:`error_page 497 301 = 307 https:// $ host:$ server_port $ request_uri;`这样,请求方法不会像默认情况那样自动转换为GET (3认同)
  • 非常感谢!!`error_page 497 https:// $ host:$ server_port $ request_uri;`做了诀窍! (2认同)