Прописанные в 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 шт):
В основном конфиге 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.Я так и не понял, где в итоге находится собранное приложение? В
/var/www/deadlinetaskbotили в/var/www/webapp?Зачем указывать два индексных файла? Разве после сборки приложения ваш индексный файл может называться как-нибудь иначе чем
index.html? Каждый лишний индексный файл - это потенциально лишний системный вызовfstat(), а значение директивыindexпо умолчанию и так соответствуетindex index.html;так что эту директиву можно просто убрать из конфигурации.
Указывая завершающий слеш в описании апстрима директивы
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; }