Задать вопрос
@Per4atku

Nginx возвращает 404 при запросе на существующий маршрут. Что делать?

Я запускаю React-приложение через nginx, которое использует react-router. В маршрутизаторе у меня есть следующие маршруты: admin, poll, donate.

Когда я перехожу к такому маршруту, как example.com/poll, через Link, встроенный элемент react-router, у меня все получается и отображается соответствующая страница. Но когда я пытаюсь получить доступ к панели администратора, набрав в адресной строке браузера https://example.com/admin, nginx выдает ошибку 404. Это также происходит, если бэкэнд перенаправляет пользователя на фронтэнд, например, на example.com/poll.

etc/nginx/sites-enabled/default
server {                                                                                                                                                                                                                                                                                                                                                
  root /var/www/html;                                                                                                                                                                                                             
  index index.html index.htm index.nginx-debian.html;                                                                                                                                                                             
  server_name example.com www.example.com;                                                                                                                                                                                
  location /{                                                                                                             
    try_files $uri $uri/ =404;                                                                      }                                                                                                                                                                                                                                       
  location ~*^/(api|date|user|auth|hello){                                                                                
    proxy_pass  http://example.com:3333;                                                                        
    proxy_http_version 1.1;                                                                                         
    proxy_set_header Upgrade $http_upgrade;                                                                         
    proxy_set_header Connection 'upgrade';                                                                          
    proxy_set_header Host $host;                                                                                    
    proxy_cache_bypass $http_upgrade;
}


Так есть ли способ зарегистрировать эти маршруты, чтобы nginx не выдавал ошибку 404?
  • Вопрос задан
  • 478 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
smilingcheater
@smilingcheater
location /{                                                                                                             
    try_files $uri $uri/ =404;

Вы говорите NGINX'у - попробуй сначала запрошенный урл, потом его же со слешем, потом выдай 404. NGINX делает точно то, что вы сказали.
Если у вас собранное реакт-приложение, то скорее всего у него точка входа index.html
Замените указанное правило на
location /{                                                                                                             
    try_files $uri $uri/ /index.html;

тогда по запрошенному (но не существующему реально на файловой системе) урлу /poll вам вернутся содержимое Index.html, и запустится реакт, и реакт-роутер обработает указанный урл.

https://nginx.org/en/docs/http/ngx_http_core_modul...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы