django nginx gunicorn — радость поддомена

#django #nginx #subdomain #gunicorn

#django #nginx #поддомен #gunicorn

Вопрос:

я пытаюсь настроить django на nginx gunicorn на сервере centos6 (брандмауэр выключен, selinux отключен). проект работает локально на сервере (протестировано под управлением gunicorn на 127.0.0.1: 8221), но не во всей сети. проект должен быть доступен из поддомена project.mydomain.com

сам проект находится на сервере centos6.mydomain.com и dns-сервер является main.mydomain.com

мой ngnix conf для проекта:

 upstream project {
    server 127.0.0.1:8221 fail_timeout=0;
}

server {
    listen 80;
    server_name project.mydomain.com;
    access_log /var/log/nginx/project.mydomain.com.log;
    error_log /var/log/nginx/project.mydomain.com.log;

    root /home/USER/djangosites/project;

    location / {
        proxy_set_header Host $host;
        if (!-f $request_filename){
            proxy_pass http://project;
            break;
        }

        }
    location /media  {
        alias /home/USER/djangosites/project/media;
        }
    location /static  {
        alias /home/USER/djangosites/project/static;
    }
}
  

nginx conf для centos6 (работает)

 server {
        listen 80 default_server;
        server_name centos6.mydomain.com;
        access_log /var/log/nginx/centos6.mydomain.com.access.log main;
        error_log /var/log/nginx/centos6.mydomain.com.error.log;

        location / {
                root /var/www/centos6.mydomain.com;
                index index.html;
        }
}
  

gunicorn conf

 import multiprocessing

bind = "127.0.0.1:8221"
logfile = "/home/USER/djangosites/project/gunicorn.log"
workers = multiprocessing.cpu_count() * 2   1
  

было бы лучше предоставить новый ip (для внешнего) проекту, который отличается от centos6.mydomain.com или я могу просто использовать один и тот же IP-адрес с другим локальным портом?

как я должен настроить hosts.db на main.mydomain.com тогда?

 centos6   A       xxx.xxx.xxx.220
project   A       xxx.xxx.xxx.221
  

или

 centos6   A       xxx.xxx.xxx.220
project   A       xxx.xxx.xxx.220:8221
  

или

 centos6   A       xxx.xxx.xxx.220
project   CNAME   centos6
  

я более склонен указывать новый IP-адрес, потому что все находится за m0n0wall, поэтому новым IP-адресом, возможно, было бы легче управлять.

итак, в принципе, я предполагаю, что мой nginx conf для проекта имеет недостатки. что мне с этим делать?

Комментарии:

1. почему бы не исключить nginx, сначала указав его на пустой каталог с index.html и посмотрите, служит ли это этому. Как только у вас это заработает, вы поймете, что это проблема gunicorn, а после этого — проблема приложения. Не должно иметь значения, на какой IP-адрес вы заходите, если это IP-адрес машины, на которой работает nginx. Какие ошибки вы видите?

2. @pastylegs поскольку я могу получить доступ к сайту локально (проверено с помощью curl) «curl 127.0.0.1: 8221» , а nginx отлично обслуживает основной статический сайт серверов (см. Мой centos6 nginx conf), я все еще предполагаю, что что-то между nginx и gunicorn перепуталось. это исключает, что gunicorn не сможет запустить мое приложение на 127.0.0.1: 8221 или где-либо еще. итак, приложение работает просто отлично, так что никаких проблем нет. об ошибках … используя curl, я просто получаю «curl: (7) не удалось подключиться к хосту»

3. просто редактирую проекты nginx conf, добавляя восходящий поток

Ответ №1:

ОК. заработало 🙂 hosts.db на main.mydomain.com

 project   CNAME   centos6
  

gunicorn запустил 127.0.0.1: 8221
и отредактировал nginx conf, как указано выше.

Комментарии:

1. После 3 лет публикации эта проблема все еще очень полезна. Это помогает мне решать те же проблемы, что и ваши.