Django Nginx uWSGI 502 Bad Gateway 总是

Posted

技术标签:

【中文标题】Django Nginx uWSGI 502 Bad Gateway 总是【英文标题】:Django Nginx uWSGI 502 Bad Gateway always 【发布时间】:2017-03-13 10:03:22 【问题描述】:

我一直在关注http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

然后走到了

http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html#running-the-django-application-with-uwsgi-and-nginx

并启动了 uwsgi --socket mysite.sock --module mysite.wsgi --chmod-socket=664 它已启动但是当我在浏览器上加载我的网页时得到 502 Bad Gateway

Django 版本 1.10.2

错误是

错误] 25444#25444: *1 connect() 失败(111:连接被拒绝) 连接上游时,客户端:127.0.0.1,服务器:mytest.com, 请求:“GET / HTTP/1.1”,上游:“uwsgi://127.0.0.1:8001”,主机: "127.0.0.1:8000"

可能是什么问题?

# configuration of the server
server 
    # the port your site will be served on
    listen      8000;
    # the domain name it will serve for
    server_name mytest.com; # substitute your machine's IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 175M;   # adjust to taste

    # Django media
    location /media  
        alias /home/karesh/tutorial/uwsgi-tutorial/mysite/media;  # your Django project's media files - amend as required
    

    location /static 
        alias /home/karesh/tutorial/uwsgi-tutorial/mysite/static; # your Django project's static files - amend as required
    

    # Finally, send all non-media requests to the Django server.
    location / 
        uwsgi_pass  unix:/home/karesh/tutorial/uwsgi-tutorial/mysite/mysite.sock;
        include     /home/karesh/tutorial/uwsgi-tutorial/mysite/uwsgi_params; # the uwsgi_params file you installed
    

项目目录中的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;

【问题讨论】:

如该错误所示,nginx 正在尝试通过端口而不是套接字进行连接。您应该显示您的 nginx 配置。 我所做的和教程中的完全一样。我的 mysite_nginx.conf 链接在启用站点的内部。 你修改配置后重启nginx了吗? 是的,我试过很多次。以前我已经安装了 apache2 并将其删除。有什么会引起问题的吗? Nginx 没有看到您的配置中的更改。你确定它链接到sites-enabled?如果是,sudo service nginx force-reloadrestart 【参考方案1】:

有几件事可以帮助您: 1) 将运行 uWSGI 的用户添加到 nginx 组 2) 在启用 SE 的 CentOS 上,放置套接字的最佳方法是在 /run 下的目录 3) 将套接字权限设置为<your_user>:nginx(换句话说 - 为您的用户和 nginx 组设置套接字权限。

这些步骤通常可以帮助我找出权限错误。

【讨论】:

以上是关于Django Nginx uWSGI 502 Bad Gateway 总是的主要内容,如果未能解决你的问题,请参考以下文章

Django Nginx uWSGI 502 Bad Gateway 总是

django+uwsgi+nginx: websock 报502/400

Nginx+uWSGI+Django 在大请求正文和过期会话时返回 502

Django uWSGI Nginx

python3 + Django + uwsgi + nginx 配置部署笔记

错误:从上游 [uWSGI/Django/NGINX] 读取响应标头时,上游过早关闭连接