首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python: NGINX+FLASK的uWSGI配置

Python: NGINX+FLASK的uWSGI配置
EN

Stack Overflow用户
提问于 2013-07-13 02:29:24
回答 2查看 11.5K关注 0票数 12

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

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

1)我将NGINX作为服务运行: service nginx start/stop/restart

如果我输入"ps aux | grep nginx",我可以看到两个进程:

主进程(通过用户根用户)主进程/usr/sbin/nginx /etc/nginx/nginx.conf

  • (by
  • -c nginx)工作进程

这样可以吗?

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

当前我手动启动uWSGI,输入"uwsgi /somedir/ uwsgi.ini ",其中uwsgi.ini如下所示:

代码语言:javascript
运行
复制
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时,当前收到以下警告:

代码语言:javascript
运行
复制
*** Python threads support is disabled. You can enable it with --enable-threads ***

我意识到在"uwsgi.ini“配置文件中,您还可以配置许多进程和线程。考虑到我运行的服务器只有一个核心,我可以设置多个进程和线程吗?如果有,有多少?

3b)在NGINX配置文件"/etc/nginx/nginx.conf“中,也可以指定"worker_processes",默认情况下是1。我可以增加这个值吗,或者只能在多核服务器上大于1?

4)除了线程支持被禁用之外,当我启动uWSGI时,我也收到了这些警告。它们是什么意思?

代码语言:javascript
运行
复制
*** WARNING: you are running uWSGI without its master process manager ***
*** Operational MODE: single process ***
*** uWSGI is running in multiple interpreter mode ***
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-13 03:26:31

我从评论中移出了最重要的几点。

  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说:

常识:不要以根用户身份运行uWSGI实例。您可以以根用户身份启动uWSGI,但请确保使用uid和gid选项删除权限。

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

  1. 您可以创建任意数量的进程和线程,但这应该取决于您尝试处理的请求数量(并发或每秒)。您可以阅读有关此here的内容。我会尝试不同的配置,并选择一个更好的。

3b。基本上,worker_processes帮助处理并发请求。请参见this question.

  • *WARNING:您正在运行没有主进程管理器的uWSGI *

您没有在.ini文件中指定master选项。虽然主进程肯定是不必要的,但它非常有用。它有助于有效地控制工人,并在他们死亡时使他们重新获得生命。

票数 6
EN

Stack Overflow用户

发布于 2014-12-17 11:17:03

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

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

当使用nginx作为反向代理时,worker_process应该<=核数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17621662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档