Действие обновления нарушено на всех сайтах, кроме домашней страницы, при запуске приложения ReactJS на nginx

#reactjs #nginx #nginx-reverse-proxy #nginx-config

#реагирует на #nginx #nginx-обратный прокси #nginx-конфигурация

Вопрос:

У меня есть приложение react, работающее на nginx — оно взаимодействует с серверной частью Java на другом узле k8s.

Проблема, с которой я борюсь, заключается в том, что, несмотря на то, что приложение в целом работает (навигация и все запросы API работают нормально, действие обновления нарушено на всех подстраницах, кроме главной страницы/корневой страницы.

Проще говоря, действие обновления не работает, если URL — адрес содержит что-то большее, чем просто домен.

В таких случаях возвращается 404 со следующим сообщением:

The requested resource [/myApp/WEB-INF/secure/index.html] is not available

также косая черта добавляется к URL-адресу, поэтому, хотя исходный URL-адрес выглядит следующим образом:

https://my-app.comp.com/myApp/someModule

URL-адрес, вызывающий 404, выглядит следующим образом: https://my-app.comp.com/myApp/someModule/

Я полагаю, что проблема вызвана самой конфигурацией nginx, так как одно и то же приложение отлично работает, будучи частью файла WAR на tomcat или запускаясь через npm start.

Мои файлы конфигурации nginx выглядят следующим образом:

nginx.conf (по умолчанию, никаких изменений там нет)

 error_log /var/log/nginx/error.log notice; pid /tmp/nginx.pid;   events {  worker_connections 1024; }   http {  proxy_temp_path /tmp/proxy_temp;  client_body_temp_path /tmp/client_temp;  fastcgi_temp_path /tmp/fastcgi_temp;  uwsgi_temp_path /tmp/uwsgi_temp;  scgi_temp_path /tmp/scgi_temp;   include /etc/nginx/mime.types;  default_type application/octet-stream;   log_format main '$remote_addr - $remote_user [$time_local] "$request" '  '$status $body_bytes_sent "$http_referer" '  '"$http_user_agent" "$http_x_forwarded_for"';   access_log /var/log/nginx/access.log main;   sendfile on;  #tcp_nopush on;   keepalive_timeout 65;   #gzip on;   include /etc/nginx/conf.d/*.conf; }  

server.conf (my, custom config file)

 upstream backend {  server backend-server-fqdn:8080; }  server {  listen 3000;  listen [::]:3000;  server_name frontend;  client_max_body_size 10M;  root /usr/share/nginx/html;  index index.html index.htm;   location ~* /(index.html|favicon.ico|styles.css|styles.min.css|css/.*|js/.*|images/.*) {  root /usr/share/nginx/html;   }    location / {  try_files $uri $uri/ @rewrites;  }   location @rewrites {  rewrite ^(. )$ /index.html last;  }   location /myApp {  proxy_pass http://server backend-server-fqdn:8080/myApp;  absolute_redirect off;  proxy_read_timeout 120s;  proxy_connect_timeout 120s;  proxy_send_timeout 120s;  send_timeout 120s;  } }