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

uWSGI Emperor模式下Flask+Nginx出现404及连接重置问题

解决uWSGI Emperor模式下Flask应用404问题

从你的描述来看,核心问题是非Emperor模式下请求正常,但切换到Emperor模式后出现404和连接重置错误,最可能的原因是vassal配置缺少关键参数,以及路径处理逻辑在Emperor模式下未正确生效。下面是具体的排查和解决步骤:

1. 给vassal配置添加manage-script-name参数

你在非Emperor模式下运行时,通过命令行传递了--manage-script-name参数,这个参数的作用是让uWSGI自动处理挂载点路径,把/PyNLP/spellCheck转换成Flask能识别的/spellCheck路由。但在Emperor模式下,这个参数没有被传递给vassal,导致Flask收到的是完整的/PyNLP/spellCheck路径,而你的路由是/spellCheck,所以返回404。

修改你的PyNLP.ini,在[uwsgi]段添加:

manage-script-name = true

2. 确认Emperor正确加载vassal配置

检查你的emperor.ini里的emperor = /var/www/html/PyNLP/,确保这个目录下确实存在PyNLP.ini,并且Emperor进程有读取该文件的权限。可以查看uWSGI启动日志,确认是否有类似loaded config file /var/www/html/PyNLP/PyNLP.ini的提示,说明vassal配置已被正确加载。

3. 排查Socket权限与连接问题

Nginx日志里的recv() failed (104: Connection reset by peer)错误,可能和Socket权限或进程间通信有关:

  • 检查/tmp/PyNLP.sock的权限:执行ls -l /tmp/PyNLP.sock,确认所有者是www-data:www-data,权限为666(你的vassal配置里已经设置了chmod-socket = 666,但Emperor模式下可能需要确认是否生效)。
  • 确保Nginx的运行用户是www-data(可以查看Nginx配置里的user指令),这样Nginx才能正常读写Socket文件。

4. 启用详细日志定位问题

在Emperor和vassal配置中添加日志配置,方便排查路径处理和启动问题:

  • 修改emperor.ini,添加日志路径:
    logto = /var/log/uwsgi/emperor.log
    
  • 修改PyNLP.ini,添加日志路径:
    logto = /var/log/uwsgi/pynlp.log
    

启动后查看日志,确认vassal启动时的参数是否正确,以及请求进来时uWSGI传递给Flask的路径是什么,这能帮你快速定位路由不匹配的原因。

5. 确认vassal的挂载参数未被覆盖

你的PyNLP.ini里已经设置了mount = /PyNLP=nltk_endpoint:app,确保Emperor的配置里没有重复设置mount参数(你的emperor.ini里该参数是注释掉的,这没问题),避免vassal的挂载配置被覆盖。

完成以上调整后,重启Emperor模式的uWSGI和Nginx,再测试POST请求应该就能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:09:36