Проблемы с проксированием Nginx на Gunicorn: запросы возвращают 404 вместо корректного ответа от Flask

Описание:

Я пытаюсь настроить Flask-приложение с использованием Nginx и Gunicorn. Приложение запускается на 127.0.0.1:5000 и корректно работает при доступе напрямую через curl:

curl http://127.0.0.1:5000/admin/login

Этот запрос возвращает HTML-страницу с формой входа. Однако при доступе к тому же URL через домен http://mydomain.com/admin/login или напрямую по IP http://<my-ip>/admin/login я получаю ошибку 404 Not Found.

Моя конфигурация Nginx (/etc/nginx/sites-available/myproject):

server {
    listen 80;
    server_name mydomain.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $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;
    }
}

Конфигурация синтаксически правильная:

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

После этого я перезапускаю Nginx и Gunicorn:

sudo systemctl restart nginx
sudo systemctl restart gunicorn

Логи Nginx (/var/log/nginx/access.log):

mydomain.com - <my-ip> - - - [дата-время] - /usr/share/nginx/html - /admin - GET /admin HTTP/1.1 - 404 - 555 - -

Логи ошибок Nginx (/var/log/nginx/error.log) показывают, что запросы к mydomain.com/admin ищут файлы в директории Nginx:

open() "/usr/share/nginx/html/admin" failed (2: No such file or directory), client: <my-ip>, server: mydomain.com, request: "GET /admin HTTP/1.1"

Конфигурация Gunicorn (/etc/systemd/system/gunicorn.service):

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=example_user
Group=www-data
WorkingDirectory=/home/example_user/my_project
ExecStart=/home/example_user/my_project/venv/bin/gunicorn --workers 3 --bind 127.0.0.1:5000 wsgi:app

[Install]
WantedBy=multi-user.target

Что я пробовал:

  • Проверил, что приложение работает при доступе напрямую через 127.0.0.1:5000.
  • Убедился, что конфигурация Nginx синтаксически корректна.
  • Несколько раз перезапускал Gunicorn и Nginx.
  • Проверил записи DNS и убедился, что они корректно разрешаются.
  • Убедился, что ufw отключен (исключил проблему с брандмауэром).

Вопрос:

Почему Nginx пытается искать файлы в своей директории (/usr/share/nginx/html) вместо того, чтобы проксировать запросы на Gunicorn, работающий на 127.0.0.1:5000? Что я упускаю в конфигурации Nginx?


Ответы (0 шт):