我设置了一个Nginx反向代理,该代理被用作多个服务器(例如融合)的SSL卸载。我已经成功使用http://confluence和https://confluence,但是当我尝试重定向http://confluence:8090时,它尝试转到https://confluence:8090并失败。
如何从URL中删除端口?
下面的配置有些修饰,但可能有帮助吗?标头中的$ server_port位是否引起了问题?
server {
listen 8090;
server_name confluence;
return 301 https://confluence$request_uri;
}
server {
listen 443 ssl http2;
server_name confluence;
location / {
proxy_http_version 1.1;
proxy_pass http://confbackend:8091
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $server_name:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Upgrade $http_upgrade; #WebSocket Support
proxy_set_header Connection $connection_upgrade; #WebSocket Support
}
}
这里似乎有很多答案涉及http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect,但在那混乱的混乱中我没有安慰。
我还以为您将拥有一台服务器,但是我正在尝试https://serverfault.com/questions/815797/nginx-rewrite-to-new-protocol-and-port的建议
我尝试弄乱port_in_redirect off;
选项,但也许我用错了吗?
答案 0 :(得分:1)
您的问题是STS
标头
add_header Strict-Transport-Security max-age=31536000;
添加STS标头时。对http://example.com:8090
的第一个请求会生成一个对https://example.com
的重定向
此https://example.com
然后在响应中返回STS
标头,并且浏览器会记住example.com
始终需要在https
上投放,无论如何。端口没有任何作用
现在,当您再次向http://example.com:8090
发出请求时,STS将启动,然后将其转换为https://example.com:8090
,这是您的问题
因为端口只能服务http
或https
,所以不能使用8090
将http
重定向到https
并重定向{{1} } https
至8090
https