当前位置: 首页 > 知识库问答 >
问题:

nginx在ubuntu 18.04 LTS上运行django时,uwsgi给出502错误

霍修筠
2023-03-14

附带说明:该站点使用Python3 manage.py 0.0.0.0:8800

但是,nginx似乎在套接字中面临权限问题,并在浏览器中给出了502坏网关错误。

nginx错误日志显示以下错误:

2020/07/08 21:05:40[crit]3943#3943:*3连接()到Unix:///home/Ubuntu/deploymenttst/mysite/mysite.sock失败(13:权限被拒绝),连接到上游时,客户端:192.168.12.12,服务器:192.168.12.12,请求:“Get/HTTP/1.1”,上游:“UWSGI://Unix:///home/Ubuntu/deploymenttst/mysite/mysite.sock:”,主机:“192.168.12.400”

配置如下:

>

  • 在项目的settings.py文件中,配置被设置为(除了默认的wsgi之外):

    DEBUG = False
    ALLOWED_HOSTS = [ "192.168.12.12" ]
    STATIC_URL = '/static/'
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    

    /etc/nginx/sites-available/mysite_nginx.conf中的mysite_nginx.conf文件具有以下配置项:

    # MySite_nginx.conf
    
    # the upstream component nginx needs to connect to
    upstream django {
        server unix:///home/ubuntu/deploymenttst/MySite/MySite.sock; # for a file socket
        #server 127.0.0.1:8008;
    }
    
    # configuration of the server
    server {
        # the port your site will be served on
        listen      8400;
        # the domain name it will serve for
        server_name 192.168.12.12; # substitute your machine's IP address or FQDN
        charset     utf-8;
    
        # max upload size
        client_max_body_size 75M;   # adjust to taste
    
    #    # Django media
        location /media  {
            alias /home/ubuntu/deploymenttst/MySite/media;  # your Django project's media files - amend as required
        }
    
        location /static {
            #alias /home/ubuntu/deploymenttst/MySite/main/static; # your Django project's static files - amend as required
            #alias /home/ubuntu/deploymenttst/MySite/register/static; # your Django project's static files - amend as required
            alias /home/ubuntu/deploymenttst/MySite/static; # your Django project's static files - amend as required
        }
    
        # Finally, send all non-media requests to the Django server.
        location / {
            uwsgi_pass  django;
            include     /home/ubuntu/deploymenttst/MySite/uwsgi_params; # the uwsgi_params file you installed
        }
    }
    

    它已经sym链接到/etc/nginx/sites-enabled/mysite_nginx.conf。

    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  REQUEST_SCHEME     $scheme;
    uwsgi_param  HTTPS              $https if_not_empty;
    
    uwsgi_param  REMOTE_ADDR        $remote_addr;
    uwsgi_param  REMOTE_PORT        $remote_port;
    uwsgi_param  SERVER_PORT        $server_port;
    uwsgi_param  SERVER_NAME        $server_name;
    

    mysite_uwsgi.ini文件中的内容如下:

    [uwsgi]
    
    # Django-related settings
    # the base directory (full path)
    chdir           = /home/ubuntu/deploymenttst/MySite
    # Django's wsgi file
    module          = MySite.wsgi
    # the virtualenv (full path)
    #home            = /home/ubuntu/deploymenttst/MySite/
    
    # process-related settings
    # master
    master          = true
    # maximum number of worker processes
    processes       = 20
    # the socket (use the full path to be safe
    socket          = /home/ubuntu/deploymenttst/MySite/MySite.sock
    # ... with appropriate permissions - may be needed
    chmod-socket    = 666
    uid = www-data
    gid = www-data
    # clear environment on exit
    vacuum          = true
    

    使用Python3 manage.py collectstatic在项目目录中的静态目录中收集了静态文件

    为什么我仍然得到坏的网关502错误,其中上游django应用程序无法联系由于权限问题?

  • 共有1个答案

    崔绍辉
    2023-03-14

    通过将项目放置到/tmp目录解决了这个问题。

    从www.data用户运行的nginx无法访问内部目录MySite,因此无法访问socket或放置在其中的文件,尽管它被分配给了用户www.data。

    现在,我的另一个问题是关于nginx权限问题的原因,尽管向www.data提供了目录的uid和gid,但问题可能是什么?

     类似资料:
    • 我一直在关注http://uwsgi-docs.readthedocs.io/en/latest/tutorials/django_and_nginx.html

    • 我遵循本教程,但我有一个问题,我得到了502 Nginx错误。 教程链接 我检查了错误日志,上面写着 uwsgi.log ImportError:没有名为khcards的模块。wsgi 我的uwsgi文件是这样的 我的nginx。形态 服务器{监听80;server_name域www.domain.co.uk;根 /var/www/example.com/src/khcards;access_lo

    • 在尝试部署我使用django开发服务器开发的博客时收到400错误后,我开始了一个新的测试项目(使用start project,不做其他任何事情——只是在这里和那里进行一点配置)-尽可能少,以保持尽可能简单。 当我执行“manage.py runserver”时,它会显示一个页面,说我看到了这个,因为我的设置中有“DEBUG=True”。 到现在为止,一直都还不错。没有错误。 但是如果我使用uWSG

    • 我的Django url模式: 自动取款机。我使用以下命令运行Django: uwsgi--socket:8000--wsgi-file wsgi.py 我可以访问Django,但是当我试图访问 www.testing.test/api/admin 时,我得到了一个404(从Django调试)。 但这让我的Django告诉我一个404 当我请求

    • 我的应用程序有以下堆栈: Nginx(1.4.6) UWSGI(1.9.17.1-Debian(64bit)) 烧瓶 Python 3.4 NGINX重启后的问题在一段时间内(几分钟)都能正常工作。在此期间之后,我收到一个“504网关超时”错误。 NGINX日志: *13从上游读取响应标头时上游超时(110:连接超时),客户端:86.123.39.44,服务器:app.fc.com,请求:“get

    • 我正试图在Docker上用Nginx、uWSGI和Postgres安装一个Django应用程序。我找到了一本关于为Django和Postgres设置Compose的优秀指南:https://docs.docker.com/v1.5/compose/django/ 但是,现在我需要添加Nginx和uWSGI。我试过使用这个回购协议的文件(https://github.com/baxeico/djan