Python:NGINX + FLASK的uWSGI配置

Dan*_*e B 10 python wsgi nginx flask uwsgi

我成功地在CentOS 6.x服务器上安装了:NGINX + uWSGI + Flask

但我仍然对配置有些怀疑:

1)我正在运行NGINX作为服务:服务nginx启动/停止/重启
如果我输入"ps aux | grep nginx",我可以看到2个进程:
- (用户root)主进程/ usr/sbin/nginx -c /etc/nginx/nginx.conf
- (通过用户nginx)工作进程
就可以了吗?

2)我为Flask设置了virtualenv,并在这样的virtualenv下安装了uWSGI包.
当前我通过输入"uwsgi /somedir/uwsgi.ini"手动启动uWSGI,其中uwsgi.ini如下:

chdir = /myappdir
uid = pyuser
chmod-socket = 666
socket = /tmp/uwsgi.sock
module = run
callable = app
virtualenv = /myappdir/myvirtualenv
Run Code Online (Sandbox Code Playgroud)

是否可以将uWSGI作为服务启动,类似于NGINX(如第1点所述)?用户应该是root用户还是非root用户?

3)当我启动uWSGI时,我目前收到以下警告:

*** Python threads support is disabled. You can enable it with --enable-threads ***
Run Code Online (Sandbox Code Playgroud)

我意识到在"uwsgi.ini"配置文件中,您还可以配置许多进程和线程.考虑到我运行的服务器只有1个核心,我可以设置多个进程和线程吗?若然,有多少?

3b)在NGINX配置文件"/etc/nginx/nginx.conf"上,也可以指定"worker_processes",默认值为1.我可以增加它,或者只能为多核服务器增加1吗?

4)除了线程支持禁用,当我启动uWSGI时,我也收到这些警告.他们的意思是什么?

*** WARNING: you are running uWSGI without its master process manager ***
*** Operational MODE: single process ***
*** uWSGI is running in multiple interpreter mode ***
Run Code Online (Sandbox Code Playgroud)

vau*_*tah 5

我从评论中提出了最重要的观点.

  1. 是的,这是正常的行为.Nginx的主进程需要root权限来管理计算机上的侦听套接字. 论坛帖子声明您可以更改它,但它可能会导致问题.但是,Nginx允许更改工作进程的所有者.

  2. 这取决于uWSGI的安装方式.如果apt-get你通过uWSGI安装就可以启动(停止,重启)它,如下所示:

    service uwsgi <action>

    你安装了uWSGI pip,所以daemonize选项可以解决这个问题:

    /path/to/uwsgi --daemonize /path/to/logfile

    你可以在任何你想要的用户下启动它,但如果你决定在root下运行它,你应该指定giduid选项.uWSGI的最佳实践页面说:

    常识:不要以root身份运行uWSGI实例.您可以以root用户身份启动uWSGI,但请务必使用uid和gid选项删除权限.

    另请参阅master-as-root选项.

  3. 您可以根据需要创建任意数量的进程和线程,但这应该取决于您尝试处理的请求数量(并发或每秒).你可以在这里阅读这个.我会尝试不同的配置,并选择哪一个更好.

    3B.基本上,worker_processes有助于处理并发请求.看到这个问题.

  4. *警告:您在没有主进程管理器的情况下运行uWSGI*

    您没有master在.ini文件中指定选项.虽然主过程肯定是不必要的,但它非常有用.它有助于有效地控制工人并在他们死亡时重生.