【问题标题】:Python: uWSGI configuration for NGINX+FLASKPython:NGINX+FLASK 的 uWSGI 配置
【发布时间】:2013-07-11 09:28:04
【问题描述】:

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

但是在配置方面我还是有一些疑惑:

1) 我将 NGINX 作为服务运行:service nginx start/stop/restart
如果我输入“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

是否可以将 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 ***

【问题讨论】:

  • 我用“pip install uwsgi”将它安装在virtualenv中

标签: python nginx flask wsgi uwsgi


【解决方案1】:

我已经从 cmets 中移走了最重要的点。

  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 以 root 身份,但一定要放弃使用 uid 和 gid 的权限 选项。

    还可以查看master-as-root 选项。

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

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

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

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

【讨论】:

  • 非常感谢水晶! - 1) 在 nginx.conf 中,我将用户设置为“nginx”,但 master 仍然以 root 身份运行。我应该设置哪个选项? - 2) 非常感谢,我在 uwsgi.ini 配置文件中指定了“deamonize”,它可以工作 - 3) 我在 uwsgi.ini 中指定了“enable-threads”和“processes = 2”,因为我读的是设置进程 = 2*CPUs - 3b) 我还在 nginx.conf 中将“worker_processes”设置为 2 - 4) 你确定需要它吗?它既不在 uwsgi 也不在烧瓶文档中:uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.htmlflask.pocoo.org/docs/deploying/uwsgi
  • 1)我把nginx停了再启动,但是master进程还在root用户下。 4)谢谢,将master添加到uwsgi.ini以及我指定的pidfile,这样我就可以轻松地管理uwsgi,如下所述:uwsgi-docs.readthedocs.org/en/latest/…
  • 谢谢,你给了我很大的帮助!作为初学者,我现在已经成功地管理了 NGINX 和 uWSGI 的设置!我希望这篇文章也能帮助其他人!
  • 绝对帮助了我。谢谢水晶丹尼尔 B
【解决方案2】:

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

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

当使用 nginx 作为反向代理时,worker_process 应该

【讨论】:

    猜你喜欢
    • 2019-09-27
    • 2017-11-27
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2013-04-10
    相关资源
    最近更新 更多