Nginx 使用自签名证书实现 https 反代 Spring Boot 中碰到的页面跳转问题

问题一:页面自动跳转到 80 端口问题描述【Nginx 使用自签名证书实现 https 反代 Spring Boot 中碰到的页面跳转问题】最近在使用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 RequestThe 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.buguagaoshu.com/archives/nginx-shi-yong-zi-qian-ming-zheng-shu-shi-xian-https-fan-dai-springboot-zhong-peng-dao-de-ye-mian-tiao-zhuan-wen-ti 转载请注明来源

    经验总结扩展阅读