Flask配合Waitress+Nginx配置SSL部署HTTPS服务无法访问问题求助
问题修复方案
1. 修复Nginx配置冲突
你配置中监听5000端口的server块完全多余,且会和本地运行的Waitress服务抢占端口,直接删除该段配置即可:
# 删掉这段完全无用的配置 server { listen 5000; server_name 127.0.0.1; return 302 https://$server_name$request_uri; }
同时补充反向代理必要的头部配置,保证Flask能正确识别客户端请求信息,调整后的443端口配置如下:
server { listen 443 ssl; # 证书请使用绝对路径,不要用相对路径,避免Nginx读取失败 ssl_certificate /绝对路径/cert.pem; ssl_certificate_key /绝对路径/key.pem; server_name 127.0.0.1; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
2. 生效Nginx配置并检查合法性
你之前只做了配置文件软链接,没有验证配置合法性也没有重载Nginx,依次执行以下命令:
# 检查Nginx配置是否有语法错误、证书是否能正常读取 sudo nginx -t # 确认上一步输出success后,重载Nginx配置 sudo systemctl reload nginx
如果nginx -t报错提示证书权限不足,给证书文件加读权限即可:
sudo chmod 644 /你的证书绝对路径/cert.pem /你的证书绝对路径/key.pem
3. 修复Flask启动参数
你使用Nginx做SSL终止,Nginx和Waitress之间是HTTP通信,不需要给Waitress加url_scheme='https'参数,调整启动代码:
if __name__ == "__main__": logger = logging.getLogger('waitress') logger.setLevel(logging.INFO) # 删掉url_scheme='https'参数 serve(app, host='127.0.0.1', port=5000)
4. 验证服务状态
- 先确认Waitress服务正常启动,没有端口占用报错
- 本地访问https://127.0.0.1时,如果是自签证书浏览器会弹出安全警告,手动信任证书即可正常访问,不属于服务异常
内容的提问来源于stack exchange,提问作者mor2778
相关产品推荐
相关产品推荐

