我正在尝试在ec2微实例上设置nginx,uwsgi,bottle.py。到目前为止,我已经安装了组件,nginx正常工作,提供了一个测试index.html页面。如果我停止nginx服务器并在python的内部开发服务器上运行测试瓶应用程序,它也可以工作。
然而,我的uwsgi无法正常工作。这是我在etc / nginx / site-enabled /中的“默认”文件。我正在使用附加到我的微实例的弹性ip(xx.xx.xx.xx)。
upstream _bottle {
server xx.xx.xx.xx:80;
}
server {
listen 80;
server_name xx.xx.xx.xx;
root /var/www/app;
location / {
try_files $uri @uwsgi;
}
location @uwsgi {
include uwsgi_params;
uwsgi_pass _bottle;
}
}
这是我的uwsgi配置文件:
[uwsgi]
chdir = /var/www/app
master = true
plugins = python
file = index.py
uid = www-data
gid = www-data
我也确保:
sudo chown -R www-data:www-data /var/www/app
当我重新启动nginx和uwsgi并使用浏览器转到弹性IP地址时,我得到了nginx的错误网关页面。
nginx错误日志给了我:
*1 upstream prematurely closed connection while reading response header from upstream, client.....
我读过“上游过早关闭”错误表示内存/ CPU /资源问题?这与使用微实例和没有足够的资源有关吗?但是唯一通过浏览器访问这个微实例的人就是我。
答案 0 :(得分:0)
似乎你错过了uwsgi配置文件中的socket
指令。您的设置不正确。
NGINX将请求传递给通道上的uWSGI进程。它可以是网络套接字或文件套接字(命名管道)。 您没有配置此频道。
在你的uwsgi配置中声明一个像
这样的文件套接字socket = /tmp/bottle.socket
在你的nginx配置中,将该套接字用于上游:
upstream _bottle {
server unix:/tmp/bottle.socket;
}
并且还记得在你的位置指令中传递uwsgi params
include uwsgi_params;
有关更多信息,请参阅official documentation