NGINX не перенаправляет вызовы из приложения реагирования в приложение бэкэнда - PullRequest
1 голос
/ 04 апреля 2019

У меня есть сервер AWS Ubuntu, на котором размещен интерфейс реагирования, работающий на 127.0.0.1:4100 и выполняющий вызовы API для приложения Go, используя порт 127.0.0.1:1323.Я установил Nginx и установил пропуск прокси-сервера для этих двух портов в файле конфигурации /etc/nginx/sites-available/default, но Nginx вызывает только внешний интерфейс.Используя Chrome Inspect, чтобы проверить, почему приложение Go не выполняет некоторые функции приложения реакции, я вижу эту ошибку

client.js: 772 GET http://127.0.0.1:1323/api/ net :: ERR_CONNECTION_REFUSEDОШИБКА Ошибка: запрос был прерван Возможные причины: сеть отключена, источник не разрешен Access-Control-Allow-Origin, страница выгружается и т. Д.

Что я делаю неправильно?Ниже мой конфигурационный файл по умолчанию

server { 

listen 80 default_server; 
listen [::]:80 default_server; 

server_name _; 

location / { 

proxy_pass http://127.0.0.1:4100; 

} 

location /api { 

proxy_pass http://127.0.0.1:1323/; 

 } 
}

1 Ответ

0 голосов
/ 04 апреля 2019

Ваш сервер прослушивает порт 80:

listen 80 default_server; 
listen [::]:80 default_server; 

Итак, вы должны сделать запрос на этот порт:

GET http://127.0.0.1/api/     => http://127.0.0.1:1323/
GET http://127.0.0.1:80/api/  => http://127.0.0.1:1323/
GET http://127.0.0.1/         => http://127.0.0.1:4100/
GET http://127.0.0.1:80/      => http://127.0.0.1:4100/

Тогда nginx должен правильно проксировать ваши запросы.

Обновление

Чтобы быть более понятным в конфигурации nginx.

server { 

listen 80 default_server;  // The port nginx is listening to ipv4
listen [::]:80 default_server; // The port nginx is listening to ipv6

server_name _; 

location / { // When you call this location...

proxy_pass http://127.0.0.1:4100; // You'll be redirected to this location

} 

location /api { // When you call this location...

proxy_pass http://127.0.0.1:1323/; // You'll be redirected to this location

 } 
}

Ваша конфигурация в порядке в соответствии с документацией nginx .

Вы сказали, что ваш клиент пытается дозвониться до http://127.0.0.1:1323/api/, но он должен запросить перенаправление http://127.0.0.1/api/ (без порта) на http://127.0.0.1:1323/.

Вот еще один пример:

server { 

    listen 80; 

    server_name localhost anywebsite.com; 

    location ~* ^/MyApp {
        proxy_pass http://localhost:5130;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_send_timeout 2m;
        proxy_read_timeout 2m;
    }
}

В этом случае, каждый раз, когда мой URL заканчивается /MyApp, например: http://anywebsite.com/api/MyApp Я прокси на http://localhost:5130. Но если я попытаюсь получить доступ к http://localhost:5130 или http://anywebsite.com:5130/api/MyApp, я не смогу, потому что nginx прослушивает только порт 80. Если вы хотите получить доступ к другому порту, вам нужно указать следующее:

server {
    listen 80; 
    listen 5130; 

[...]
...