我成功设法安装: 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 ***
答案 0 :(得分:5)
我从评论中提出了最重要的观点。
是的,这是正常行为。 Nginx的主进程需要root 管理计算机上的侦听套接字的权限。 This 论坛帖子说明你可以改变它,但它可能会导致 问题。但是,Nginx确实允许更改所有者 工人流程。
这取决于uWSGI的安装方式。如果通过apt-get
安装了uWSGI,则可以启动(停止,重启)它
像这样:
service uwsgi <action>
您通过pip
安装了uWSGI,因此daemonize选项可以
诀窍:
/path/to/uwsgi --daemonize /path/to/logfile
您可以在任何您想要的用户下启动它,但如果您决定运行 在root下,你应该指定gid和 uid个选项。 uWSGI的best practices page说:
常识:不要以root身份运行uWSGI实例。你可以开始你的 uWSGI以root用户身份,但请务必使用uid和gid删除权限 选项。
另请参阅master-as-root选项。
您可以根据需要创建任意数量的进程和线程,但它应该 取决于您尝试处理的请求数量(并发或 每秒)。你可以阅读这个here。我会尝试 不同的配置,并选择哪一种更好。
3B。基本上,worker_processes
有助于处理并发问题
要求。请参阅this问题。
*警告:您在没有主进程的情况下运行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核心数。