使用uWSGI

时间:2015-12-13 01:05:00

标签: django nginx uwsgi

我要做的是在nginx 1.6.3上使用uwsgi设置django,并在centos7上使用http绑定到端口8000。 我查看了blog

document

博客非常令人困惑,它对我的​​nginx版本无效; 但文档很不错,所有步骤都让我使用uwsgi成功执行,但我遇到了nginx问题。

首先,我只能将nginx作为sudoer(root)运行,所以我为root用户创建了virtualenv。 然后,我在我的nginx配置: /etc/nginx/sites-enabled/mysite_nginx.conf 并做了一个软链接:

sudo ln -s /etc/nginx/sites-enabled/mysite_nginx.conf /etc/nginx/mysite_nginx.conf

但是在nginx重启后nginx没有选择它。有谁知道为什么?

要继续,我决定将/etc/nginx/mysite_nginx.conf重命名为/etc/nginx/nginx.conf以强制它被接收。 我的django应用程序位于: 的/ usr /共享/ nginx的/ firstsite 由root拥有,我的nginx用户是nginx。 这是我的nginx.conf:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    include /etc/nginx/conf.d/*.conf;
    upstream django {
        server 127.0.0.1:8001;
    }

    server {
        listen       8000 default_server;
        listen       [::]:8000 default_server;
        server_name  _;
        root         /usr/share/nginx/firstsite;

        client_max_body_size 300M;   # adjust to taste

        location /media  {
            alias /usr/share/nginx/firstsite/media;
        }

        location /static {
            alias /usr/share/nginx/firstsite/static;
        }

        location / {
            uwsgi_pass  django;
            include     /usr/share/nginx/firstsite/uwsgi_params;
        }
    }
}

另外我不明白如何配置uwsgi。我有一个有效的wusgi.ini。我只需要知道uwsgi.ini文件的放置位置以及是否可以以非root用户身份运行nginx和uwsgi。

我已经运行了nginx测试,它说我的配置文件没问题。 最后,我在尝试启动nginx时遇到错误。 它说它没有绑定到端口8000的权限。 所以我看了this post

然后我尝试了:

yum -y install policycoreutils-python
semanage port -l | grep http_port_t
semanage port -a -t http_port_t  -p tcp 8000

我收到错误:

ValueError: Port tcp/8000 already defined

我知道这里有几个问题和问题,但目标很明确。

2 个答案:

答案 0 :(得分:0)

可能是......

a)系统防火墙是块python / nginx / bash等从绑定到端口80或

b)您需要使用sudo运行它。这是因为类Unix操作系统需要超级用户权限才能将应用程序绑定到well-known port

答案 1 :(得分:0)

nginx通常以root身份运行。 uwsgi也可以以root身份或普通用户身份运行,通常您可以以root用户身份运行,并将uwsgi应用程序配置为以非root用户身份运行(您可以在uwsgi配置文件中为您的应用程序指定) - 查看@doniyor发布的链接,了解有关如何设置附庸的详细信息。

您也可以进行设置,以便在更改文件(通常是应用程序的wsgi文件)时,uwsgi将重新启动该应用程序。您通常在该文件上使用touch命令,并且该文件位于普通用户帐户中,您可以轻松地重新启动应用程序而无需成为root用户。

原因nginx未提取您的文件是文件需要位于/etc/nginx/sites-enabledln命令获取-s开关中的来源,所以你实际上是以相反的方式链接文件。

即使对于普通用户,绑定到未预留端口的权限也不应成为问题。有可能某些东西已经在该端口上运行,尝试不同的东西,如8001.