【问题标题】:Nginx and uWSGI: Connection refused and 502 Bad Gateway errorNginx 和 uWSGI:连接被拒绝和 502 Bad Gateway 错误
【发布时间】:2014-02-07 01:10:17
【问题描述】:

尝试在 Ubuntu 13.10 上设置 Nginx 和 uWSGI。

当我尝试访问该网站时,我得到的只是“502 Bad Gateway”。

apt-get install nginx uwsgi uwsgi-plugin-python3安装nginx/uwsgi。

/etc/nginx/sites-enabled/webpage.com:

server {
        listen          80;
        server_name     webpage.com;
        access_log /var/log/nginx/webpage.com_access.log;
        error_log /var/log/nginx/webpage.com_error.log;


        location / {
            uwsgi_pass      /var/run/webpage.com.uwsgi.socket;
            include         uwsgi_params;
            uwsgi_param     Host $host;
            uwsgi_param     X-Real-IP $remote_addr;
            uwsgi_param     UWSGI_SCHEME $scheme;
            uwsgi_param     SERVER_SOFTWARE nginx/$nginx_version;     
        }
}

/etc/uwsgi/apps-enabled/webpage.com

[uwsgi]
vhost = true
plugin = python3
socket = /tmp/webpage.com.sock
master = true
enable-threads = true
processes = 2
home = /var/www/webpage.com/env
wsgi-file = /var/www/webpage.com/env/hello.py
virtualenv = /var/www/webpage.com/env
chdir = /var/www/webpage.com/env
touch-reload = /var/www/webpage.com/reload

/var/log/nginx/webpage.com_error.log

2014/01/17 16:28:58 [error] 25073#0: *13 connect() to unix:///var/run/webpage.com.uwsgi.socket failed (111: Connection refused) while connecting to upstream, client: 83.109.132.224, server: webpage.com, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///var/run/webpage.com.uwsgi.socket:", host: "webpage.com"

hello.py 只是一个简单的 hello world 应用程序。

已经为此苦苦挣扎了几个小时......现在我需要帮助:)

【问题讨论】:

  • 很可能你的uWSGI实例没有运行,用“ps aux”检查它并检查uWSGI日志

标签: python nginx uwsgi


【解决方案1】:

查看此处发布的配置文件,您将 nginx 中的套接字引用为:

uwsgi_pass      /var/run/webpage.com.uwsgi.socket;

在 uwsgi 中作为

socket = /tmp/webpage.com.sock

【讨论】:

  • 我将 /etc/uwsgi/apps-enabled/webpage.com 中的套接字从 /tmp/webpage.com.sock 更改为 /var/run/webpage.com.uwsgi.socket - 但仍然收到 502 Bad Gateway 错误...
  • socket文件的文件权限为:-rw-r--r-- 1 www-data www-data 0 Jan 17 14:32 /var/run/webpage.com.uwsgi.socket
  • 日志在我的第一篇文章中注明。
  • @thomas 你确定 uwsgi 正在运行吗?包括ps -ewwf | grep uwsgi的输出
  • @Thomas 所以 uwsgi 没有运行 :) 检查/var/log/uwsgi/...中的 uwsgi 错误日志
【解决方案2】:

我意识到这与 OP 的问题没有任何关系,但由于这是 Google 中该错误消息的热门话题,我想说明是什么解决了我的问题。

我正在遵循一个教程,该教程建议将 uwsgi_pass 127.0.0.1:9090; 放入 nginx 配置中,以使用 http-socket = :9090uwsgi 配置中设置的 Python 脚本。错误日志/var/log/nginx/error.log 显示了问题:2015/08/13 02:16:04 [error] 12566#12566: *2 upstream prematurely closed connection while reading response header from upstream, client: ::1, server: ~^(www\.)?(.+)$, request: "GET /hello/ HTTP/1.1", upstream: "uwsgi://127.0.0.1:9090", host: "kybyz" 同时,浏览器给了我 502 Bad Gateway 错误。

有两种方法(至少)可以修复它。第一个是将uwsgi 配置中的http-socket 更改为简单的socket(事实证明,推荐tutorial;我只是没有仔细阅读它)。但是,这将不再允许我通过将浏览器指向http://127.0.0.1:9090/ 来直接测试脚本,因为脚本现在使用uwsgi 协议而不是http。所以我改回http-socket 并在nginx 配置中将uwsgi_pass 行更改为proxy_pass http://127.0.0.1:9090;

【讨论】:

  • 按照我自己的教程,我自己错过了那部分......但你在这里的回答帮助我找到了问题。谢谢。
【解决方案3】:

这没有回答 OP 的原始问题,但我在 nginx 中遇到了同样的错误,connect() to unix:///tmp/uwsgi_dev.sock failed (13: Permission denied) while connecting to upstream,我可以通过完全重新启动 uwsgi 进程来修复它。这是一个生产服务器,所以我犹豫要不要硬重启,但只是重新加载 uwsgi 进程并没有成功。希望对某人有所帮助。

【讨论】:

    【解决方案4】:

    通常这是一个文件权限问题,即 nginx 进程无法读取 uwsgi 套接字文件。检查套接字文件的权限及其父文件夹和祖父文件夹等。您可以使用一个命令执行此操作(假设您的 nginx 进程由用户 nginx 运行):

    su nginx -c "[[ -r sockfile ]] && echo ok"
    

    【讨论】:

      【解决方案5】:

      对于我在 AWS 上的 Python Django 应用程序,它只是过载了。

      首先,我添加了更多服务器,并注意到 C 实例(计算)优于通用 (M) 实例,因为 M 实例在运行后有 66% 的 CPU 负载作为窃取(由其他一些客户使用)运行出 CPU 积分。

      但是在运行应用程序一段时间后(并且在短时间内传入请求的数量增长了 5 倍之后),我还检查了数据库性能 (RDS),它以 100% 的速度运行。我还将数据库实例大小从 4 个 CPU 增加到 8 个 CPU,现在它又可以正常工作了。

      【讨论】:

        猜你喜欢
        • 2018-01-06
        • 1970-01-01
        • 1970-01-01
        • 2015-04-30
        • 2020-10-26
        • 2020-05-25
        • 2018-04-23
        • 2016-09-14
        • 2017-02-05
        相关资源
        最近更新 更多