2013-07-12 109 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內核數量。