Nginx反向代理:将所有http请求重定向到https
Posted
技术标签:
【中文标题】Nginx反向代理:将所有http请求重定向到https【英文标题】:Nginx reverse proxy : Redirect all http requests to https 【发布时间】:2018-02-22 05:00:41 【问题描述】:我有一个反向代理,nginx 在端口 5000 上运行,我想将所有到达端口 5000 的请求作为 https 请求重定向。
现在我收到错误:400 Bad Request The plain HTTP request was sent to HTTPS port
server
listen 5000 ssl;
server_name myserver.com;
location /
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header Host $host:5000;
add_header 'Access-Control-Allow-Methods' 'GET, POST';
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type';
add_header 'Access-Control-Allow-Credentials' 'true';
# here comes the basic auth, after the options part
auth_basic 'Restricted';
auth_basic_user_file path/to/.htpasswd;
ssl on;
ssl_certificate path/to/crt;
ssl_certificate_key path/to/key;
我尝试添加
if ($scheme != "https")
rewrite ^ https://$host$request_uri permanent;
if ($scheme != "https")
return 301 https://$host$request_uri permanent;
似乎没有什么能解决问题。我应该怎么做才能解决这个问题?
【问题讨论】:
nginx redirect HTTPS to HTTP的可能重复 【参考方案1】:假设 http 流量来自端口 80,您可以通过添加一个额外的服务器块监听此端口来重定向到 https:
server
listen 80;
server_name myserver.com;
location /
return 301 https://myserver.com$request_uri;
【讨论】:
【参考方案2】:这听起来可能很简单,但您是否尝试过在您输入的域名前面添加“https://”?我发现默认总是一个普通的“http”请求。
【讨论】:
是的,但在一段时间后,某些请求页面会刷新,“https://”会被删除,我会进入上述错误页面 那么,下面的答案就是您想要的答案 - 自动重定向到 ssl url。 我是否在 location 内使用 proxy_redirect? 这是我的,但它应该在服务器块和位置块之外工作。位置块将允许您为每个单独的呼叫设置它。【参考方案3】:嗯,使用 error_page 似乎对我有用。
server
listen 5000 ssl;
server_name myserver.com;
error_page 497 https://$host:5000$request_uri;
..
..
要了解有关 497 的更多信息,请查看http://nginx.org/en/docs/http/ngx_http_ssl_module.html 中的“错误处理”部分
【讨论】:
以上是关于Nginx反向代理:将所有http请求重定向到https的主要内容,如果未能解决你的问题,请参考以下文章