запуск nginx, uwsgi, бутылки на микроэкземпляре ec2

Я пытаюсь настроить nginx, uwsgi, Bottle.py на микроэкземпляре ec2. На данный момент я установил компоненты, и 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.....

Я читал, что ошибка «преждевременно закрыт восходящий поток» указывает на проблемы с памятью/процессором/ресурсами? Это как-то связано с использованием микроэкземпляра и нехваткой ресурсов? Но единственный человек, который имеет доступ к этому микроэкземпляру через браузер, это я.


person daemonk    schedule 16.09.2013    source источник


Ответы (1)


Кажется, вам не хватает директивы socket в файле конфигурации uwsgi. Ваша установка неверна.

NGINX передает запрос процессу uWSGI по каналу. Это может быть сетевой сокет или файловый сокет (именованный канал). Вы не настроили этот канал.

В вашей конфигурации uwsgi объявите файловый сокет, например

socket = /tmp/bottle.socket

И в вашей конфигурации nginx используйте этот сокет для восходящего потока:

upstream _bottle {
    server unix:/tmp/bottle.socket;
}

а также не забудьте передать параметры uwsgi в директиве вашего местоположения

include uwsgi_params;

Для получения дополнительной информации см. официальную документацию.

person Paolo Casciello    schedule 17.09.2013