麻辣鸡翅 发表于 2024-9-11 18:13:25

Flask+Nginx反向代理ssl报错The plain HTTP request was sent to HTTPS port解决办法

最近通过Nginx反向代理一个网站,环境为Flask+uwsgi+Nginx反向代理,当部署证书并设置强制跳转https以后,在浏览器输入:blog.amd5.cn访问出现了“400 Bad Request The plain HTTP request was sent to HTTPS port”错误,如下图:

一开始怀疑自己的配置有问题,反复确认和对比以后,排除配置问题。
于是网上搜索了相关报错,找到了解决方案,出现这种报错的主要原因是:
因为HTTP请求被发送到HTTPS端口,这种报错多出现在Nginx既处理HTTP请求又处理HTTPS请求的情况。
正常80端口访问应该是:http://blog.amd5.cn:80/login
正常开启HTTPS以后443端口访问应该是:https://blog.amd5.cn:443/login
但是此时却变成了: http://blog.amd5.cn:443/login,即HTTP请求被发送到HTTPS端口。
如果我直接在浏览器输入:https://blog.amd5.cn,却能正常跳转到https://blog.amd5.cn/login
直接输入http://blog.amd5.cn/login,也能正常跳转到https://blog.amd5.cn/login
为什么会有这样的问题呢,经过排查原来是多次重定向导致的,主要是因为在使用Flask-Login验证登录的时候,如果未登录,会重定向到登录页面。
通过浏览器开发者工具,可以看到,当我浏览器输入blog.amd5.cn,第一次重定向为http->https:1
页: [1]
查看完整版本: Flask+Nginx反向代理ssl报错The plain HTTP request was sent to HTTPS port解决办法