关于ubuntu下 nginx+uwsgi部署flask的坑,有大佬知道为啥吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于ubuntu下 nginx+uwsgi部署flask的坑,有大佬知道为啥吗?相关的知识,希望对你有一定的参考价值。

uwsgi启动以后一定要先使用killall -s INT uwsgi命令杀掉进程,不然通过公网ip访问会超时,杀掉进程后就可以正常访问了,这是为什么?

当你在Ubuntu下使用nginx和uwsgi部署flask时,uwsgi服务器的默认配置可能会导致问题。uwsgi默认会创建一个主进程和一个或多个工作进程,而当nginx代理请求时,它可能会将请求发送到已经关闭的工作进程,导致超时错误。使用killall -s INT uwsgi命令杀掉uwsgi进程可以解决这个问题,因为这个命令会向uwsgi主进程发送SIGINT信号,通知它关闭所有工作进程。然后,当你再次启动uwsgi时,它会重新创建一组新的工作进程,这些工作进程应该都能够正常工作。
为了避免这种情况,你可以修改uwsgi的配置,使它只创建一个工作进程。这样,当nginx代理请求时,它就只会将请求发送到一个工作进程,而不会出现超时错误。你可以在uwsgi配置文件中添加processes = 1来实现这一目的。例如:
==============
[uwsgi]
socket = /tmp/uwsgi.sock
chdir = /path/to/your/app
wsgi-file = app.py
callable = app
processes = 1
==============
希望这些信息能够帮助你解决问题。追问

processes = 1 这个一开始就设置了的,而且不是再次启动uwsgi,使用killall命令并没有完全杀死uwsgi,想完全停止进程需要执行两次killall命令,让我奇怪的点的就是,在还没有执行killall命令的时候可以使用127.0.0.1:5000地址访问,但公网ip会超时;执行第一次killall命令后,无法访问127.0.0.1:5000,但公网ip可以正常访问;执行第二次killall命令则会完全干掉uwsgi进程,内网公网均无法访问

参考技术A 1. Ubuntu下部署Nginx+uWSGI+Flask的坑主要有以下几个:

2. 首先是Nginx的配置,需要在Nginx的配置文件中添加uWSGI的配置,以及指定uWSGI的socket文件,否则Nginx无法正常访问uWSGI。

3. 其次是uWSGI的配置,需要在uWSGI的配置文件中指定Flask的项目路径,以及指定Flask的入口文件,否则uWSGI无法正常加载Flask项目。

4. 最后是Flask的配置,需要在Flask的配置文件中指定Flask的调试模式,以及指定Flask的端口号,否则Flask无法正常运行。

5. 因此,在Ubuntu下部署Nginx+uWSGI+Flask时,需要正确配置Nginx、uWSGI和Flask,才能正常访问Flask项目。

以上是关于关于ubuntu下 nginx+uwsgi部署flask的坑,有大佬知道为啥吗?的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu18部署uwsgi+flask应用

Ubuntu环境下部署Django+uwsgi+nginx总结

Ubuntu16下部署Django+Nginx+uwsgi

Ubuntu下Django部署nginx+uwsgi

Ubuntu下Django部署nginx+uwsgi

django+uwsgi+nginx部署在ubuntu系统上