Как загрузить 2 приложения для фляг для обслуживания 2 поддоменов для nginx/uwsgi с использованием сокетов unix?

Я следую этому руководству uwsgi, чтобы настроить nginx/uwsgi на 1 Приложение flask запускает поддомен «www», а другое приложение flask запускает поддомен «api». Мой nginx.conf:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    access_log  /path/to/access_nginx.log combined;
    error_log   /path/to/error_nginx.log  crit;

    include mime.types;
    sendfile on;

    server {
    server_name   api.example.com;
        listen 14265;

        location / {
        include uwsgi_params;
        uwsgi_param UWSGI_SCRIPT wsgi_api;
        uwsgi_pass unix:///path/to/api.sock;
        }
    }

    server {
    server_name   www.example.com;
        listen 14265;

        location / {
            include uwsgi_params;
            uwsgi_param UWSGI_SCRIPT wsgi;
            uwsgi_pass unix:///path/to/wsgi.sock;
        }
    }
}

Для запуска uwsgi я делаю:

#!/bin/bash
APPNAME=nginx
# Start uwsgi
${HOME}/webapps/${APPNAME}/bin/uwsgi \
  --uwsgi-socket "${HOME}/webapps/${APPNAME}/wsgi.sock" \
  --master \
  --workers 1 \
  --max-requests 10000 \
  --harakiri 60 \
  --daemonize ${HOME}/webapps/${APPNAME}/uwsgi.log \
  --pidfile ${HOME}/webapps/${APPNAME}/uwsgi.pid \
  --vacuum \
  --python-path ${HOME}/webapps/${APPNAME}

# Start nginx
${HOME}/webapps/${APPNAME}/bin/nginx

Когда я посещаю www.example.com, он работает, как и ожидалось. Однако я получаю ошибку 502 для api.example.com. Чтобы исправить ошибку 502, я могу изменить api.sock на wsgi.sock в своем nginx.conf, но это даст мне страницу для www.example.com при посещении api.example.com (хотя wsgi.py и wsgi_api.py разные).

РЕДАКТИРОВАТЬ: Все примеры, которые я нашел для настройки нескольких субдоменов на nginx/uwsgi (включая тот, на который я ссылался), показывают, как делать субдомены со статическими сайтами. Я не могу найти тот, который показывает, как это сделать с сокетами unix.


person user_78361084    schedule 14.06.2014    source источник
comment
Ваша конфигурация nginx в порядке. Код ответа 502 Bad Gateway означает, что что-то не так с uWSGI. Проверьте журнал приложения API.   -  person Dmitry Vakhrushev    schedule 18.06.2014
comment
@DmitryVakhrushev Я проверил это. Каждое приложение отлично работает само по себе, но когда я пробую приведенную выше конфигурацию, я получаю ошибку 502 в одном из них. Я также заметил, что создается только wsgi.sock, что говорит о том, что моя конфигурация uwsgi неверна????   -  person user_78361084    schedule 18.06.2014


Ответы (1)


Я также заметил, что создается только wsgi.sock

Это ответ на ваш вопрос, если вы не получили api.sock, nginx не сможет передать ему запрос. Таким образом, вы получите 502. Вы должны запустить uwsgi для каждого из ваших приложений:

#!/bin/bash

# Start uwsgi 
for APPNAME in "app_1" "app_2"
do
    uwsgi \
      --uwsgi-socket "${HOME}/webapps/${APPNAME}/wsgi.sock" \
      --master \
      --workers 1 \
      --max-requests 10000 \
      --harakiri 60 \
      --daemonize ${HOME}/webapps/${APPNAME}/uwsgi.log \
      --pidfile ${HOME}/webapps/${APPNAME}/uwsgi.pid \
      --vacuum \
      --python-path ${HOME}/webapps/${APPNAME}
done
person Dmitry Vakhrushev    schedule 19.06.2014