mal1kov
@mal1kov
Притворись дураком 5 минут, чем быть им всю жизнь.

Как запустить отдельный сайт на Django и отдельный на Flask (NGINX+Gunicorn+Supervisor)?

У меня два сайта:
1. foo.site.com
2. bar.site.com

Первый работает на Django, а второй на Flask. Я настроил конфиги, но почему-то запросы на второй сайт попадают на первый и выдает ошибку Bad Request (400). Если на конфигурацию Django приложения добавить bar.site.com в ALLOWED_HOSTS, то ошибка 400 пропадает и вместо этого появляется Not Found, хотя у обоих разные порты :)

foo.site.com
Конфиг NGINX

upstream foo{
        server 127.0.0.1:8001 fail_timeout=0;
}

server {
        server_name foo.site.com;

        client_max_body_size 100M;

        access_log /var/log/nginx/foo.log;
        error_log /var/log/nginx/foo_error.log;

        location / {
                proxy_ignore_client_abort on;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $http_host;
                proxy_redirect off;
                proxy_pass http://foo;
        }
}


Конфиг Gunicorn

command='/home/www/code/django/foo-django/env/bin/gunicorn'
pythonpath='/home/www/code/django/foo-django/foo'
bind='127.0.0.1:8001'
workers=7
timeout=300
user='www'
loglevel='debug'
accesslog='/home/www/code/django/foo-django/foo/logs/gunicorn_access.log'
accesslogformat="%(h)s %(l)s %(u)s %(t)s %(r)s %(s)s %(b)s %(f)s %(a)s"
errorlog='/home/www/code/django/foo-django/foo/logs/gunicorn_error.log'
raw_env='DJANGO_SETTINGS_MODULE=foo.settings'

Скрипт для Gunicorn

#!/bin/bash
source /home/www/code/django/foo-django/env/bin/activate
exec gunicorn -c "/home/www/code/django/foo-django/gunicorn/gunicorn_config.py" foo.wsgi


Конфиг Supervisor

[program:www_gunicorn_foo]
command=/home/www/code/django/foo-django/bin/start_gunicorn.sh
user=www
process_name=%(program_name)s
numprocs=1
autostart=true
autorestart=true
redirect_stderr=true

---
bar.site.com
Конфиг NGINX

upstream bar{
        server 127.0.0.1:8002 fail_timeout=0;
}

server {
        server_name bar.site.com;
        client_max_body_size 100M;

        access_log /var/log/nginx/bar.log;
        error_log /var/log/nginx/bar_error.log;

        location / {
                proxy_ignore_client_abort on;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $http_host;
                proxy_redirect off;
                proxy_pass http://bar;
        }
}


Конфиг Gunicorn

command='/home/www/code/flask/bar/venv/bin/gunicorn'
pythonpath='/home/www/code/flask/bar/admin'
bind='127.0.0.1:8002'
workers=7
timeout=300
user='www'
loglevel='debug'
accesslog='/home/www/code/flask/bar/logs/gunicorn_access.log'
acceslogformat="%(h)s %(l)s %(u)s %(t)s %(r)s %(s)s %(b)s %(f)s %(a)s"
errorlog='/home/www/code/flask/bar/logs/gunicorn_error.log'


Скрипт для Gunicorn

#!/bin/bash
source /home/www/code/flask/bar/venv/bin/activate
exec gunicorn -c "/home/www/code/flask/bar/admin/gunicorn/gunicorn_config.py" wsgi:app


Конфиг Supervisor

[program:www_gunicorn_bar]
directory=/home/www/code/flask/bar/admin
command=/home/www/code/flask/bar/admin/bin/start_gunicorn.sh
user=www
process_name=%(program_name)s
numprocs=1
autostart=true
autorestart=true
redirect_stderr=true


Что я делаю не так?
  • Вопрос задан
  • 175 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Drno
Примерный конфиг Nginx для неск доменов. Он же у вас как обратный прокси, верно?

#Redirect All HTTP
server {
    listen 80;
    server_name _;
    return 301 https://$host$request_uri;
}
#PROXY
#
#Nextlcoud
server {
        listen 443 ssl http2;
        server_name soundpartner.domain.ru;
        keepalive_timeout 70;
        ssl_certificate /etc/letsencrypt/live/domain.ru-0001/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/domain.ru-0001/privkey.pem; # managed by Certbot

# set max upload size and increase upload timeout:
        client_max_body_size 10G;
        client_body_timeout 300s;
        fastcgi_buffers 64 4K;

location / {
        proxy_pass http://localhost:8083;
        proxy_set_header   Host $http_host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
    proxy_cache off;

#Xibo
server {
        listen 443 ssl http2;
        server_name xibo.domain.ru;
        keepalive_timeout 70;
        client_max_body_size 10G;
        ssl_certificate /etc/letsencrypt/live/domain.ru-0001/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/domain.ru-0001/privkey.pem; # managed by Certbot

location / {
        proxy_pass http://localhost:8080;
        proxy_set_header   Host $http_host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
}
}

#Zabbix
server {
        listen 443 ssl http2;
        server_name zabbix.domain.ru;
        keepalive_timeout 70;
        client_max_body_size 10G;
        ssl_certificate /etc/letsencrypt/live/domain.ru-0001/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/domain.ru-0001/privkey.pem; # managed by Certbot

location / {
        location / {
        proxy_pass http://192.168.121.2:8081;
         proxy_set_header   Host $http_host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
}
}
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы