繁体   English   中英

Python:NGINX + FLASK的uWSGI配置

[英]Python: uWSGI configuration for NGINX+FLASK

我成功地安装了: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

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

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

*** Python threads support is disabled. You can enable it with --enable-threads ***

我意识到,在“ 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 ***

我已经从评论中移走了最重要的观点。

  1. 是的,这是正常行为。 Nginx的主进程需要root特权才能管理计算机上的侦听套接字。 论坛主题指出您可以更改它,但可能会导致问题。 但是,Nginx确实允许更改工作进程的所有者。

  2. 这取决于uWSGI的安装方式。 如果uWSGI是通过apt-get安装的,则可以像这样启动(停止,重新启动):

    service uwsgi <action>

    您是通过pip安装uWSGI的,因此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 *

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

3b)当您的nginx消耗大量CPU时,可以将多核与worker_process一起worker_process

基本上,Python应用程序比nginx反向代理慢得多。 因此,一个nginx进程就足够了。 但是某些nginx选项(例如gzip: on;gzip_proxied: any )会消耗一些CPU。 观看顶部命令输出。 如果nginx进程消耗大量CPU,则可以增加worker_process。

当使用nginx作为反向代理时,worker_process应该<= CPU核心数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM