nginx - Chrome 似乎正在缓存 307 重定向并且没有端口
问题描述
我有一个网站,并且出于无关紧要的原因(硬约束是另一个进程必须侦听 443),我需要在非标准端口(在本例中为 8443)上托管 https 版本。我想重定向端口 80 上的 http 请求。在我想出以下 nginx 服务器指令之前,我对此进行了一些谷歌搜索,并尝试了很多组合:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 307 https://$host:8443$request_uri;
}
server {
listen 8443 ssl http2;
listen [::]:8443 ssl http2;
server_name example.com www.example.com;
ssl on;
error_page 497 https://$server_name:8443$request_uri;
root /var/www/example.com;
ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
include /etc/nginx/snippets/ssl-params.conf;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
}
现在 - 它有点工作。 http://example.com
重定向到https://example.com:8443
. 但是正确的重定向只工作一次。在第一次成功重定向后,后续请求在浏览器中被重写,因为https://example.com
没有端口。我可以通过清除浏览器缓存再次获得正确的行为,并且可以确认curl -Iv http://www.example.com
显示提供了正确的 307 代码和端口。
解决方案
推荐阅读
- java - 使用 Gson/Jackson 和 Spring Boot 重新创建没有字段属性的 DTO 类,而不是让它为空
- unity3d - 未检测到 Agora Unity 演示场景网络摄像头
- java - 做java教程,收到错误信息
- reactjs - 使用来自另一个组件的 React-Query QueryCache
- android - 如何从片段中的资产读取和解析 json 文件
- javascript - 从 Seuquelize 返回然后 JavaScript 中的代码块
- python - 使用 argparse 是否可以使先前定义的参数成为必需?
- amazon-web-services - 使用 AWS-Pinpoint 将通知推送到多个设备
- google-translate - 从@google-cloud/translate 得到非常慢的响应
- spring-boot - 如何将自定义弹簧方面注释传递给建议