Nginx和uWSGI:连接被拒绝,502错误的网关错误

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

当我尝试访问网站时,我所得到的是“502坏门户”。

然后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世界应用程序。

一直在挣扎几个小时…现在我需要帮助:)

看看这里发布的配置文件,你可以参考nginx中的套接字:

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

和uwsgi一样

 socket = /tmp/webpage.com.sock 

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

我意识到这与OP的问题没有任何关系,但是由于这是Google的这个错误消息的热门话题,所以我想注意一下解决问题的方法。

我正在关注一个教程,建议把uwsgi_pass 127.0.0.1:9090; 插入到uwsgi配置中使用http-socket = :9090设置的Python脚本的nginx配置中。 错误日志/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坏门错误。

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

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

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

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

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

但是在运行一段时间之后(并且在短时间内传入请求的数量增长了5倍之后),我还检查了数据库性能(RDS),并且运行在100%。 我还将数据库实例的大小从4个CPU增加到8个CPU,现在它再次运行,没有错误。