Python:NGINX + FLASK的uWSGI配置

时间:2013-07-12 18:29:24

标签: python nginx flask wsgi uwsgi

我成功设法安装: NGINX + uWSGI +烧瓶 在CentOS 6.x服务器上

但我在配置方面仍有一些疑问:

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

2)我为Flask设置了virtualenv,并在这样的virtualenv下安装了uWSGI包。
Currenty我通过输入" 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

是否可以将uWSGI作为服务启动,类似于NGINX(如第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 ***

2 个答案:

答案 0 :(得分:5)

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

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

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

    service uwsgi <action>

    您通过pip安装了uWSGI,因此daemonize选项可以 诀窍:

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

    您可以在任何您想要的用户下启动它,但如果您决定运行 在root下,你应该指定giduid个选项。 uWSGI的best practices page说:

      

    常识:不要以root身份运行uWSGI实例。你可以开始你的   uWSGI以root用户身份,但请务必使用uid和gid删除权限   选项。

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

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

    3B。基本上,worker_processes有助于处理并发问题 要求。请参阅this问题。

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

    您没有在.ini文件中指定master选项。虽然掌握 过程当然是不必要的,它非常有用。它有助于 有效控制工人,并在他们死后重生。

答案 1 :(得分:1)

3b)当你的nginx占用大量CPU时,可以使用worker_process多核。

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

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