2013-07-12 108 views
9

我成功设法安装: NGINX +一个CentOS 6.x的服务器的Python:为NGINX + FLASK uWSGI配置

,但我仍然在配置方面有些疑惑的uWSGI +瓶 :

1)我正在运行NGINX作为服务:如果我输入“ps aux | grep nginx”,我可以看到2个进程:
-/nginx -c /etc/nginx/nginx.conf
- (用户nginx)工作进程
是吗?

2)我为Flask设置了virtualenv,并在这样的virtualenv下安装了uWSGI包。

chdir = /myappdir 
uid = pyuser 
chmod-socket = 666 
socket = /tmp/uwsgi.sock 
module = run 
callable = app 
virtualenv = /myappdir/myvirtualenv 

是否有可能开始uWSGI作为一种服务,类似于NGINX(:
Currenty我通过键入“uwsgi /somedir/uwsgi.ini”,其中uwsgi.ini如下手动启动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 *** 
+0

我把它安装在virtualenv上,用“pip install uwsgi” –

回答

4

我已经移动了评论中最重要的一点。

  1. 是的,这是正常的行为。 Nginx的主进程需要root权限 来管理机器上的监听套接字。 This 论坛线程状态表示您可以更改它,但可能会导致 问题。但是,Nginx确实允许更改 工作进程的所有者。

  2. 这取决于uWSGI的安装方式。如果uWSGI经apt-get安装就可以启动(停止,重新启动)它 这样的:

    service uwsgi <action>

    您通过pip安装uWSGI,所以daemonize选项会做 的伎俩:

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

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

    常识:不要以root身份运行uWSGI实例。您可以以超级用户身份启动您的uWSGI,但请务必使用uid和gid 选项来放弃特权。

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

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

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

  4. *警告:你正在运行uWSGI没有它的主进程 经理*

    没有指定在.ini文件master选项。虽然主人 进程肯定是不必要的,但它非常有用。它有助于 有效地控制工人,并在他们死后复活。

+0

非常感谢Crystal! - 1)在nginx.conf中,我将用户设置为“nginx”,但主设备仍以root身份运行。我应该设置哪个选项? - 2)非常感谢,我在uwsgi.ini配置文件中指定了“deamonize”,并且它工作正常 - 3)我在uwsgi.ini中指定了“enable-threads”和“processes = 2”,因为我读为设置进程的良好折衷= 2 * CPU - 3b)我还在nginx.conf中将“worker_processes”设置为2 - 4)您确定需要它吗?它既不在uwsgi也不在烧瓶文档中:http://uwsgi-docs.readthedocs。org/en/latest/WSGIquickstart.html http://flask.pocoo.org/docs/deploying/uwsgi/ –

+0

@DanieleB 1)你重新启动了nginx吗? 4)在uWSGI中初始化主进程有时很有用。其实,这里提到:http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html#adding-concurrency-and-monitoring。它有助于有效地控制工人。 – vaultah

+0

1)我停止了nginx并重新启动,但主进程仍在root用户之下。 4)谢谢,我在uwsgi.ini中添加了master,并指定了pidfile,以便我可以轻松管理uwsgi,如下所述:http://uwsgi-docs.readthedocs.org/en/latest/Management.html #reloading-the-server –

1

3b)当你的nginx消耗了大量的CPU时,你可以使用多核与worker_process

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

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