Проблема с NGINX (deploy)
Описание:
Разворачиваю приложения на боевом сервере.
Домен приобритён, DNS ссылается на сервер.
Проблема:
Если в браузере перехожу на сайт http://mysite.com (например), то получаю стандартную страницу приветствия NGINX, НО если указываю http://mysite.com/admin/ или http://mysite.com/api/ или вообще http://mysite.com/?zz=xx и т.п., то возвращаются страницы приложения и статика подтягивается.
ВОПРОС:
Что нужно сделать (куда копать), чтобы решить проблему? В логах ошибок нет, но при переходе на главную в nginx.access.log пишется информация, а при переходе на /api/ (и т.п.) в mysite.access.log .
Конфигурация nginx конфига приложения:
upstream django {
# server 127.0.0.1:3000;
server unix:/run/gunicorn.sock;
}
server {
listen 80;
server_name mysite.com;
# root /home/user/projects/frontend/mysite-frontend/.nuxt;
# index index.html index.htm index.js;
access_log /var/log/nginx/mysite.access.log;
error_log /var/log/nginx/mysite.error.log;
# To frontend
location / {
# proxy_pass http://localhost:3000;
uwsgi_pass django;
}
# To backend
location /admin/ {
include proxy_params;
}
# To backend
location /api/ {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
# To static dir
location /static/ {
root /home/user/projects/backend/;
}
# To media dir
location /media/ {
root /home/user/projects/backend/;
}
}
Статус Gunicorn:
> sudo systemctl status gunicorn
● gunicorn.service - gunicorn daemon
Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2020-08-13 06:57:57 UTC; 5s ago
TriggeredBy: ● gunicorn.socket
Main PID: 90858 (gunicorn)
Tasks: 4 (limit: 4557)
Memory: 114.7M
CGroup: /system.slice/gunicorn.service
├─90858 /home/user/projects/backend/mysite-env/bin/python /home/user/projects/backend/...
├─90862 /home/user/projects/backend/mysite-env/bin/python /home/user/projects/backend/...
├─90863 /home/user/projects/backend/mysite-env/bin/python /home/user/projects/backend/...
└─90864 /home/user/projects/backend/mysite-env/bin/python /home/user/projects/backend/...>
Aug 13 06:57:57 srv-user systemd[1]: Started gunicorn daemon.
Aug 13 06:57:57 srv-user gunicorn[90858]: [2020-08-13 06:57:57 +0000] [90858] [INFO] Starting gunicorn 20.0.4
Aug 13 06:57:57 srv-user gunicorn[90858]: [2020-08-13 06:57:57 +0000] [90858] [INFO] Listening at: unix:/run/gunicorn.sock (9085>
Aug 13 06:57:57 srv-user gunicorn[90858]: [2020-08-13 06:57:57 +0000] [90858] [INFO] Using worker: sync
Aug 13 06:57:57 srv-user gunicorn[90862]: [2020-08-13 06:57:57 +0000] [90862] [INFO] Booting worker with pid: 90862
Aug 13 06:57:57 srv-user gunicorn[90863]: [2020-08-13 06:57:57 +0000] [90863] [INFO] Booting worker with pid: 90863
Aug 13 06:57:58 srv-user gunicorn[90864]: [2020-08-13 06:57:58 +0000] [90864] [INFO] Booting worker with pid: 90864
Используемые технологии:
ОС: Ubuntu Server 20.04
NGINX: nginx/1.18.0 (Ubuntu)
Backend APP: Django (DRF) + Gunicorn
P.S.
Активно мониторю вопрос.
При необходимости предоставлю дополнительные данные.
http://mysite.com - не оригинальный домен, заменил на такой в вопросе в целях безопасности.
Ответы (1 шт):
Скорее всего у вас сохранён стандартный конфиг nginx, который устанавливается при скачивании nginx. Необходимо перейти по пути /etc/nginx/sites-enabled/ и удалить там конфиг, который называется default.
Конфиг который использую я для django при разворачивании боевых серверов (пример):
# the upstream component nginx needs to connect to
upstream django {
server unix:///home/server/deployment/uwsgi/uwsgi_nginx.sock; # for a file socket
server 127.0.0.1:8001; # for a web port socket
}
# configuration of the server
server {
# the port your site will be served on
listen 8000 ssl http2;
listen [::]:8000 ssl http2;
#ssl
ssl_certificate /home/server/deployment/ssl/my_domain.crt;
ssl_certificate_key /home/server/deployment/ssl/my_domain.key;
# the domain name it will serve for
server_name my_domain;
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /uploads {
alias /home/server/backend/my_site/uploads;
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /home/server/deployment/uwsgi/uwsgi_params; # the uwsgi_params file you installed
}
}
Файл uwsgi_params:
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
ssl можно убрать
Для gunicorn можно попробовать изменить конфиг так (не уверен, что будет работать):
upstream django {
# Лучше указывать полный абсолютный путь а не относительный
server 127.0.0.1:8001;
server unix:/..;
}
server {
# ...
location / {
proxy_pass http://django;
}
}