Проблема с размещением приложения react на маршруте веб-сайта — несколько веб-сайтов на одном IP-адресе NGINX

#reactjs #amazon-web-services #ubuntu #nginx #pm2

#reactjs #amazon-веб-сервисы #ubuntu #nginx #pm2

Вопрос:

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

Итак, у меня есть веб-сайт, который размещен на сервере ubuntu aws с помощью nginx и pm2. моя проблема в том, что я хочу обслуживать веб-сайт по адресу www.mysite.com , а приложение react — по адресу www.mywebsite.com/app . кажется, что это не самое сложное, что нужно сделать. Однако у меня возникли проблемы, и я не могу заставить его работать так, как хотелось бы. (частично это связано с тем, что я также хочу разместить сервер API на www.mywebsite.com/api , но после этого это проблема). Сначала я смог просто разместить приложение react на www.mysite.com со следующей конфигурацией nginx:

 server {
    listen 80;
    server_name 18.191.56.251;
    root /home/ubuntu/app/src;
location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_max_temp_file_size 0;
    proxy_pass http://127.0.0.1:3000/;
    proxy_redirect off;
    proxy_read_timeout 240s;
}
}
  

Но когда я переключаю его на подмаршрут, изменяя конфигурацию следующим образом:

 server {
    listen 80;
    server_name x.x.x.x;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_redirect off;
        proxy_set_header   X-Forwarded-Proto $scheme;

        proxy_connect_timeout       600;
        proxy_send_timeout          600;
        proxy_read_timeout          600;
        send_timeout                600;

    location /status {
        return 200;
    }

    location /app {
        proxy_pass http://127.0.0.1:3000;
    }

    location / {
        proxy_pass http://...:3011/;
    }
}
  

Тогда мой базовый маршрут www.mywebsite.com для статического веб-сайта работает нормально, но www.mywebsite.com/app не работает и «загружает» пустую страницу, но при проверке вы видите, что приложение не может загрузить некоторые ресурсы:

 bundle.js:1
Failed to load resource: the server responded with a status of 404 (Not Found)
0.chunk.js:1 
Failed to load resource: the server responded with a status of 404 (Not Found)
main.chunk.js:1 
Failed to load resource: the server responded with a status of 404 (Not Found)
  

РЕДАКТИРОВАТЬ дополнительные исследования:
Если я проверю запрос на ресурс, я увижу, что его URL- www.mywebsite.com/static/js/XXX.js но статическая папка находится по адресу ~/app/build/static . это проблема nginx или pm2 с размещением статических файлов?

Любая помощь приветствуется, спасибо

Комментарии:

1. Вы пробовали добавлять косую черту после proxy_pass http://127.0.0.1:3000 ? т.Е. proxy_pass http://127.0.0.1:3000/

Ответ №1:

Поэтому мне все равно понравился бы другой результат, чем этот, но я нашел обходной путь для этого, я добавил следующее после location /app :

 location /static {
     proxy_pass http://127.0.0.1:3000;
}
  

мне не нравится это решение, потому что, если у меня в конечном итоге будет статический контент как часть других проектов, это не сработает, но каким-то образом все ресурсы для моего веб-сайта упакованы в правильный прокси по адресу / . итак, в настоящее время все работает.