在ec2微实例上运行nginx,uwsgi,瓶子

时间:2013-09-16 13:34:01

标签: nginx amazon-ec2 uwsgi bottle

我正在尝试在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 /资源问题?这与使用微实例和没有足够的资源有关吗?但是唯一通过浏览器访问这个微实例的人就是我。

1 个答案:

答案 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