Как привязать свойство конфигурации хоста Express-Gateway к localhost с помощью обратного прокси-сервера Nginx?

Express-Gateway не может подключиться к localhost или 127.0.0.1

Вызов конечных точек напрямую работает должным образом:

 curl http://localhost:5000/ip 

 curl http://localhost:5010/erp

Доступ ко всем конечным точкам через ExpressGateway на порту 5000 работает должным образом.

 curl http://localhost:5000/ip 

 curl http://localhost:5000/api/erp

Проблема

Обратный прокси-сервер nginx работает нормально, но при доступе к шлюзу возвращает неудачный ответ.

Cannot GET /api/erp

Связывание host: localhost для http в gateway.config.yml не имеет никакого эффекта. Даже когда я меняю хост на другой IP-адрес и порт, порт отражает изменение, но IP-адрес хоста остается неизменным, как [::: 5000] в консоли экспресс-шлюза.

Пожалуйста, как я могу это решить?

gateway.config.yml

http:
  port: 5000


admin:
  port: 9876
  host: localhost

apiEndpoints:
  api:
    host: localhost
    paths: '/ip'

  erp:
    host: localhost
    paths: ['/api/erp', '/api/erp/*']                    
                          
serviceEndpoints:
  httpbin:
    url: 'https://httpbin.org'

  erpService:
    url: 'http://localhost:5010'                     
                          
      
policies:
  - basic-auth
  - cors
  - expression
  - key-auth
  - log
  - oauth2
  - proxy
  - rate-limit

pipelines:
  default:
    apiEndpoints:
      - api
    policies:
    # Uncomment `key-auth:` when instructed to in the Getting Started guide.
    # - key-auth:
      - proxy:
          - action:
              serviceEndpoint: httpbin 
              changeOrigin: true

  erpPipeline:
    apiEndpoints:
      - erp
    policies:
    # Uncomment `key-auth:` when instructed to in the Getting Started guide.
    # - key-auth:
      - proxy:
          - action:
              serviceEndpoint: erpService
              changeOrigin: true

Обратный прокси с Nginx


server {
listen 82;

location / {
        proxy_pass http://localhost:5010;
        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;
        }
}


server {
listen 81;

location / {
        proxy_pass http://localhost:5000;
        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;
        }
}

person Nditah    schedule 06.08.2020    source источник


Ответы (2)


Вам необходимо указать имя хоста в файле gateway.config. *

"http": {
    "hostname": "0.0.0.0",
    "port": 1234
  },

Имя хоста также может быть localhost.


Для экспресс-шлюза, если имя хоста не указано, IP-адрес сервера будет использоваться в качестве имени хоста по умолчанию.

Пример: IP-адрес вашего сервера: 123.456.789.12 Следующий журнал появится при запуске шлюза gateway http server listening on 123.456.789.12:5000

Вот почему nginx не может вызвать localhost:5000

Когда указано имя хоста, журнал должен быть: info: gateway http server listening on 0.0.0.0:5000

person Ryan Pham    schedule 14.11.2020
comment
Я четко заявил, что установка имени хоста тоже не работает. - person Nditah; 15.11.2020
comment
вы можете показать мне журнал, когда запускаете свой шлюз? - person Ryan Pham; 16.11.2020

Измените localhost на свой локальный ip в этой части:

erpService:
    url: 'http://localhost:5010'

Заменить на пример:

erpService:
    url: 'http://192.168.0.3:5010'

И измените порт конфигурации nginx с 82 на 5010

server {
listen 5010;

location / {
        proxy_pass http://localhost:5010;
        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;
        }
}

Этот конфиг у меня работает.

person Daniel Burbano    schedule 15.03.2021