Nginx 使用自签名证书实现 https 反代 Spring Boot 中碰到的页面跳转问题
问题一:页面自动跳转到 80 端口
问题描述
最近在使用Nginx反代一个Spring Boot项目中碰到了一个问题,使用 Spring Boot 中的 redirect:
进行页面跳转的时候,通过 Nginx 反代访问后,页面会自动跳转到 80 端口,导致服务无法访问,页面跳转错误。
问题解决
出现这种问题的原因是因为在配置 location
中的 proxy_set_header Host $host;
时候,没有加端口号,正确的配置应该是这样的
proxy_set_header Host $host:$server_port;
问题二:页面由 https 协议自动跳转到 http 协议
问题描述
解决了上面的端口问题后,后面又出现自动跳转到 http 协议的端口,例如访问 https://127.0.0.1:8082/page
会自动跳转到 http://127.0.0.1:8082/page
,导致 Nginx 报
400 Bad Request
The plain HTTP request was sent to HTTPS port
解决
出现这种问题的原因是因为在配置 location
中的 proxy_redirect
时候,设置成了 off
,没有配置合适的跳转协议,正确的应该是这样
proxy_redirect http://$host:$server_port https://$host:$server_port;
即将 Spring Boot 的 http 协议跳转更换为 https 协议跳转
此时问题解决
完整配置
server {
listen 8082 http2 ssl;
ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_redirect http://$host:$server_port https://$host:$server_port;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Origin '';
proxy_connect_timeout 60;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_pass http://127.0.0.1:8079;
}
版权
本文作者:陕西颜值扛把子
本文链接:https://www.cnblogs.com/puzhiwei/p/16857226.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
,
标签:
,
,
,
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步