Как решить проблему «От вышестоящего сервера был получен неверный ответ» на Kong Gateway?

Я использую Docker с Compose, создал несколько микросервисов и пытаюсь подключить их через Kong Gateway.

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

      http://service1.localhost:8081 (Laravel with PHP MS)
http://service2.localhost:8081 (Laravel with PHP MS)
http://service3.localhost:8081 (Laravel with PHP MS)

http://frontend.localhost:8080 (Nuxt JS With Node MS)

Вопрос в том, что у меня есть контейнер только с Nginx, который позволяет мне использовать другие микросервисы указанным выше способом через обратный прокси-сервер, но URL-адреса MS в Laravel имеют примеры путей:

/api/v1/abc /api/v1/abc/def /api/v1/def /api/v1/def/123 /api/v1/abc/abcd-efg

То есть у них есть несколько путей «в глубину». И когда я пытаюсь вставить эти URL-адреса в Kong, я получаю сообщение об ошибке при доступе к ним:

«От вышестоящего сервера получен неверный ответ»

А в браузере показывает 502; Я понимаю, что 502 — это плохой шлюз, поэтому я считаю, что ошибка может быть в настройках, которые я использую в файле конфигурации Nginx.

Моя конфигурация Nginx выглядит следующим образом (по одному файлу для каждого MS в Laravel, просто меняя путь и поддомен URL-адреса):

      server {
    listen 80;
    listen [::]:80;
    server_name service1.localhost;
    
    root /var/www/service1/public;

    error_log  /var/log/nginx/error.logs;
    access_log /var/log/nginx/access.logs;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
 
    index index.php;
 
    charset utf-8;
 
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
 
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
 
    error_page 404 /index.php;
 
    location ~ \.php$ {
        fastcgi_pass service1.localhost:9000;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;        
    }
 
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

В журналах докера в контейнере Kong я вижу следующие ошибки:

      [error] 2140#0: *13211 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: kong, request: "GET /api/v1/states HTTP/1.1", upstream: "http://172.19.0.2:8000/api/v1/states", host: "localhost:8000"
    [error] 2140#0: *13211 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: kong, request: "GET /api/v1/states HTTP/1.1", upstream: "http://172.19.0.2:8000/api/v1/states", host: "localhost:8000"
    [error] 2140#0: *13211 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: kong, request: "GET /api/v1/states HTTP/1.1", upstream: "http://172.19.0.2:8000/api/v1/states", host: "localhost:8000"
    [error] 2140#0: *13211 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: kong, request: "GET /api/v1/states HTTP/1.1", upstream: "http://172.19.0.2:8000/api/v1/states", host: "localhost:8000"
    [error] 2140#0: *13211 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: kong, request: "GET /api/v1/states HTTP/1.1", upstream: "http://172.19.0.2:8000/api/v1/states", host: "localhost:8000"
    [error] 2140#0: *13211 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: kong, request: "GET /api/v1/states HTTP/1.1", upstream: "http://172.19.0.2:8000/api/v1/states", host: "localhost:8000"

Поскольку внутренний IP-адрес контейнера service1, и этоэто IP-адрес шлюза . Все микросервисы находятся в одной сети. Я уже ввел эти адреса в файл хостов Windows.

      192.168.0.109 host.docker.internal
192.168.0.109 gateway.docker.internal

А еще я использую конфигурацию extra_hosts во всех микросервисах:

      extra_hosts:
  - "host.docker.internal:host-gateway"

Я пробовал конфигурацию в Kong несколькими способами, просматривал несколько руководств, видел несколько примеров, но ни одно видео или статья не показывали пример в виде микросервиса с обратным прокси-сервером в поддомене...

Я уже пытался настроить в Kong конфигурацию для поиска URL-адреса (service1.localhost:8081), я уже пробовал внутренний IP-адрес (172.19.0.2:8081) с внутренним портом, которым поделился MS (49154). ) и никак не получалось.

PS: Я использую WSL2, не знаю, актуально ли это, но если кому-то интересно...

0 ответов

Другие вопросы по тегам