Nginx і Gunicorn 502 - пітон, джанго, нігінкс, гунізор

Я розгортаю програму на сервері, але я, мабуть, не розумію тут деяких основних понять. Проблема в тому, що я використовую gunicorn з портом 8001

gunicorn myproj.wsgi:application --bind XXX.XXX.XXX.XXX:8001

Nginx, однак, слухає порт 8000, як ви можете бачити у файлі / etc / nginx / sites-available / myproj:

server {
listen 8000;
server_name XXX.XXX.XXX.XXX;

access_log off;

location /static/ {
root /opt/myproj;
}

location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3p "CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"";
}
}

Отже, ось що відбувається:

Коли я отримую доступ до XXX.XXX.XXX.XXXX: 8001, я отримую свою сторінку, але без будь-яких статичних файлів. Я можу отримати доступ до статичних файлів XXX.XXX.XXX.XXX:8000/static/css/mycss.css. Однак, коли я отримую доступ до XXX.XXX.XXX.XXX:8000, отримую 502 - Bad Gateway помилка

Що я тут непорозуміння? Як отримати доступ до сторінки зі статичними файлами?

Відповіді:

2 для відповіді № 1

Ваша проблема відбувається тому, що ви є обов'язковимиgunicorn до вашого зовнішнього ip, але nginx пересилає на порт localhost. Справа в тому, що gunicorn не повинен бути доступним зовні; всі запити повинні пройти через зворотний проксі nginx.

Прив'язують gunicorn до 127.0.0.1:8001.


1 для відповіді № 2

Основною схемою при використанні серверів додатків, наприклад gunicorn, є:

[Веб-браузер користувача] <-> [Веб-сервер (Nginx)] <-> [Сервер додатків (Gunicorn)]

Веб-сервер зазвичай слухає публічний IPадреса на порт 80, а потім перенаправляє з'єднання на сервер додатків, що виступає в якості зворотного проксі. Якщо ви запускаєте сервер прикладних програм і веб-сервер на одному і тому ж хості, то звичайно прив'язувати як до "localhost" (IP: 127.0.0.1), так і до одного порту, тобто 8001 у вашому випадку. вказано у вашій конфігурації Nginx.

Примітка: У випадку, коли на одному комп'ютері працюють два сервери, зазвичай варто підключати їх через сокети Unix замість мережевих сокетів для підвищення продуктивності.