Прописанные в nginx.conf пути не работают

Доброого времени суток. Я деплою приложение на js:

sudo npm install --global yarn
sudo yarn install
sudo REACT_APP_DTASKBOT_API_URL=/api/v1 yarn build

дальше я переместил приложение в /var/www/deadlinetaskbot:

cp -r build/* /var/www/deadlinetaskbot

собрал приложение и переместил его в /var/www/webapp

yarn install
yarn build
sudo cp -r dist/* /var/www/webapp

я настроил конфиг в /etc/nginx/conf.d/deadlinetaskbot.conf:

server {
    listen 80;
    listen [::]:80;
    server_name localhost www.localhost;

    location / {
    root /var/www/deadlinetaskbot;
    index index.html index.htm;
    try_files $uri /index.html;
}

location /api/v1/ {
    proxy_pass http://localhost:8000/;
    include proxy_params;
}

location /adminer/ {
    proxy_pass http://localhost:8080/;
    include proxy_params;
    
}}

но когда я перезагружаю nginx и захожу по заданным URL, то выдает 404. В чем проблема?


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

Автор решения: Ivan Shatsky
  1. В основном конфиге nginx в контексте http одной из последних как правило присутствует строка:

    http {
        ...
        include /etc/nginx/conf.d/*.conf;
    }
    

    В пакетах из репозиториев Debian и производных (например, Ubuntu) составители пакетов добавляют туда ещё одну строку:

    http {
        ...
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
    }
    

    В вашем файле nginx.conf, который вы выложили на pastebin, ни одной из этих строк нет, так что никакие дополнительные фрагменты конфигурации просто не подключаются. Добавьте туда эту строку и сделайте nginx'у reload.

  2. Я так и не понял, где в итоге находится собранное приложение? В /var/www/deadlinetaskbot или в /var/www/webapp?

  3. Зачем указывать два индексных файла? Разве после сборки приложения ваш индексный файл может называться как-нибудь иначе чем index.html? Каждый лишний индексный файл - это потенциально лишний системный вызов fstat(), а значение директивы index по умолчанию и так соответствует

    index index.html;
    

    так что эту директиву можно просто убрать из конфигурации.

  4. Указывая завершающий слеш в описании апстрима директивы proxy_pass, при передаче запроса на апстрим вы отрезаете от URI передаваемого запроса префиксы /api/v1 и /adminer соответственно. Вы делаете это осознанно? Если нет - уберите эти завершающие слеши:

    location /api/v1/ {
        proxy_pass http://localhost:8000;
        include proxy_params;
    }
    
    location /adminer/ {
        proxy_pass http://localhost:8080;
        include proxy_params;
    }
    
→ Ссылка