Flask应用HTTP可访问所有接口,HTTPS仅根路径可用问题求助
问题解决:HTTPS下非根路径返回404的原因及修复
你的问题根源在HTTPS对应的Nginx server块里的try_files指令——它会拦截非根路径的请求,优先尝试在本地文件系统查找资源,找不到就直接返回404,不会转发给Gunicorn处理Flask接口。
修复步骤:修改Nginx的HTTPS配置块
打开/etc/nginx/sites-available/default,找到HTTPS对应的server块,移除try_files $uri $uri/ =404;这一行,修改后的location /配置如下:
location / { proxy_pass http://jobapplication; 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 https; include proxy_params; }
原因说明
- HTTP的server块没有
try_files指令,所有请求都能正常转发给Gunicorn处理Flask路由; - HTTPS的server块加了
try_files后,Nginx会先检查/var/www/html下是否存在对应文件/目录(比如get_skillsets),显然不存在,就直接返回404,跳过了转发给Gunicorn的流程; - 直接访问5000端口绕过了Nginx,所以Flask能正常处理所有路由。
验证修复
修改配置后,执行命令重启Nginx生效:
sudo systemctl restart nginx
再测试HTTPS下的非根接口(比如https://nearhire.app/get_skillsets),应该能正常返回JSON数据了。
内容的提问来源于stack exchange,提问作者tyzion
相关产品推荐
相关产品推荐

