在ubuntu 16.04上使用nginx和uwsgi部署django项目时,nginx无法正确提供文件

时间:2018-06-30 14:03:37

标签: python django nginx uwsgi

当我部署Django项目时,请遵循以下教程:[http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html?highlight=django 当我完成步骤 nginx基本测试时,我键入taopinpin.cn/media/media.png后,页面响应被拒绝,如下所示: enter image description here

和我的项目是这样的: enter image description here mysite_nginx.conf文件是:

upstream django {
    server 127.0.0.1:8001;
}
server {
    listen      8000;
    server_name  taopinpin.cn;

    charset     utf-8;

    client_max_body_size   75M;


    location /media  {
        alias /root/mysite/media;
    }
    location /static {
        alias /root/mysite/static;
    }
    location / {
        uwsgi_pass    django;
        inlcude       /root/mysite/mysite/uwsgi_params;
    }
}

我不知道哪里出错了,您能帮我调试一下吗?非常感谢。

3 个答案:

答案 0 :(得分:0)

在您的 mysite_nginx.conf 中尝试以下操作:

upstream cluster {
    server 127.0.0.1:8001;
} 

server {
    listen      8000;
    server_name  taopinpin.cn;
    charset     utf-8;
    client_max_body_size   75M;

    location / {
         uwsgi_pass cluster;
         proxy_set_header X-Forwarded-Protocol $scheme;
         include /root/mysite/mysite/uwsgi_params;
         uwsgi_modifier1 30;
         proxy_set_header HTTP_AUTHORIZATION $http_authorization;
         proxy_set_header  X-Real-IP  $remote_addr;
         proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header  Host $http_host;
         proxy_redirect  off;
         uwsgi_read_timeout 900;
     }

     location /media  {
         alias /root/mysite/media;
     }

     location /static {
         alias /root/mysite/static;
     }

     location ~* ^.+\.(js|css)$ {
         access_log off; log_not_found off;
     }

}

,然后在您的/root/mysite/mysite/uwsgi_params中(验证该文件确实存在):

uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_ADDR $server_addr;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;

运行nginx -t以验证您的语法有效。

运行service nginx reload/etc/init.d/nginx reload

创建目录/root/mysite/logs并将其写为    sudo mkdir /root/mysite/logs

然后重新启动uwsgi-调整youruseryourproject以符合您的规格:

   uwsgi --socket :8001 --module yourproject.wsgi --emperor /etc/uwsgi/vassals --uid youruser --gid youruser  --master --processes 6 --threads 3 --stats 127.0.0.1:9191 --daemonize=/root/mysite/logs/uwsgi.log

基于您的映像,nginx服务器无法在以下位置提供媒体文件 /root/mysite/media-赋予Nginx用户所有权 如果您在/etc/nginx/nginx.conf中的用户是

user    www-data;

然后做:

sudo chown www-data:www-data /root/mysite/media

-nginx用户(可能不是root用户)必须有权访问此目录。

答案 1 :(得分:0)

这里有一些错误。 ie.document.querySelector("a[onclick*=https://www.ishares.com/us/products/239505/ishares-us-consumer-goods-etf/1395165510754.ajax]").Click root并不是同一件事,实际上在这里完全没有必要。您应该在位置指令之外指定一次root。无论如何,他们将从服务器指令继承它,并且您基本上在做同样的事情。

alias

答案 2 :(得分:0)

首先,您在inlcude中有一个错字,而应该是include

基于screen capture,您以用户root的身份运行应用程序,并且您的应用程序安装在目录~/mysite上,用户{{ 1}},但是当使用用户名/root/mysite运行nginx时,除非使用root运行所有内容,否则无法访问www-data使用/root/mysite或与sudo一起运行应用不是一个好习惯。

默认情况下,root安装在sudo中,除非您的目录不在uwsgi_params中,否则通常不需要指定目录。

缺少对Web根目录在nginx配置中的位置的定义,如果您定义了Web根目录/etc/nginx/,则定义了etc/nginx/root /root/mysite的位置指令似乎是多余且必要的。

就上述所有内容而言,这是它应适用于用户location /media的配置,并假设您还将location /static的用户设置从root更改为{{ 1}}。 再次不推荐。

/etc/nginx/nginx.conf