You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask应用部署后运行一段时间POST请求失效,请求排查方案

Flask应用POST请求失效排查方案

问题背景

在Linode上通过Nginx、Gunicorn和Supervisor部署Flask应用,初始运行状态正常,但一段时间后页面可正常加载,登录、「联系我们」等POST请求却停止工作。std.err.log无错误记录,但Nginx日志显示failed(111: connection refused) while connecting to upstream。

现有配置

Nginx配置

server {
    server_name www.datiance.org;

    location /static/css/ {
        alias /home/ier/flask_blog/static/css/;
    }

    location /static/images/ {
        alias /home/ier/flask_blog/static/images/;
    }

    location / {
        proxy_pass http://localhost:8000;
        include /etc/nginx/proxy_params;
        proxy_redirect off;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/www.datiance.org/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.daiance.org/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

Supervisor配置

[program:flaskblog]
directory=/home/ier/flask_blog
command=/home/ier/flask_app/venv/bin/gunicorn -w 3 blog:app
user=ier
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
stderr_logfile=/var/log/flaskblog/flask_blog.err.log
stdout_logfile=/var/log/flaskblog/flask_blog.out.log

排查方案

  • 检查Gunicorn进程状态:执行ps aux | grep gunicorn查看进程是否存活。若进程全部消失,检查Supervisor日志(/var/log/supervisor/supervisord.log)确认自动重启失败原因;若进程存在但无响应,手动执行supervisorctl restart flaskblog后测试POST请求。
  • 验证8000端口可用性:用netstat -tulpn | grep 8000或ss -tulpn | grep 8000查看端口是否被监听。若无进程监听,说明Gunicorn未正常启动或崩溃;若有监听,本地执行curl -X POST http://localhost:8000/login -d "username=test&password=test"模拟POST请求,判断问题出在Gunicorn内部还是Nginx代理环节。
  • 查看Gunicorn标准输出日志:std.err.log无错误不代表没有问题,检查/var/log/flaskblog/flask_blog.out.log,里面可能记录了POST请求处理时的内存耗尽、数据库连接超时、死锁等细节。
  • 排查服务器资源占用:用top或htop查看CPU、内存使用率,若资源耗尽,系统OOM Killer可能杀掉Gunicorn进程,可执行dmesg | grep OOM确认是否存在内存溢出导致的进程被杀情况。
  • 修正Nginx配置错误:注意到Nginx配置中ssl_certificate_key的域名拼写为www.daiance.org,与实际域名www.datiance.org不一致,先修正该拼写错误;同时检查/etc/nginx/proxy_params是否包含proxy_set_header Host $host;等必要请求头,缺失这类配置可能导致Flask无法正确处理POST请求。
  • 检查数据库连接状态:POST请求通常涉及数据库操作,执行systemctl status mysql(或对应数据库服务命令)查看数据库是否正常运行,同时检查数据库连接数是否耗尽、是否存在连接超时情况——若Flask未正确关闭数据库连接,可能导致连接池耗尽,无法处理新请求。
  • 调整Gunicorn Worker数量:当前配置3个Worker,若请求量较大可能导致Worker被占满,可根据服务器CPU核心数调整为2*核心数+1,观察问题是否复现。
  • 排查防火墙与SELinux限制:执行ufw status(或firewall-cmd --list-all)查看防火墙是否拦截8000端口;用sestatus检查SELinux是否开启,若开启则查看/var/log/audit/audit.log,确认是否存在阻止Nginx连接8000端口的策略。

内容的提问来源于stack exchange,提问作者LoveCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 22:10:30