Конфигурация nginx proxy_pass для двух сервисов, работающих на портах diff - PullRequest
0 голосов
/ 04 марта 2019

Мне нужно перенаправить или proxy_pass следующее:

Каждый запрос, начинающийся с /api/v1/ до: @server все остальное / до @client

У меня есть @serverработают на порте 8080 и @client на порте 8081 @client and @server работают в качестве док-контейнеров.

Примечание.Все должно быть с помощью https.Следующий конфиг - это то, что у меня есть, но оно не работает idkw

server {
  server_name example.com;

  listen 80;
  listen [::]:80 ipv6only=on;

  return 301 https://example.com$request_uri;
}

server {
    server_name example.com;

    listen 443 ssl;

    ssl_certificate     /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    ...

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    location /api/v1/ {
        try_files $uri @server;
    }

    location / {
        try_files $uri @client;
    }

    location @client {
        proxy_pass http://client:8081;
    }

    location @server {
        proxy_pass http://server:8080/api/v1/;
    }

}

1 Ответ

0 голосов
/ 04 марта 2019

Если вы должны использовать именованные местоположения, тогда вы можете использовать error_page подход ниже.

По return ing неиспользованным HTTP-кодам состояния и error_page для тех кодов, которые установлены в именованные местоположения, мы можем пересылать запросы в эти именованные местоположения:

server {
  server_name example.com;

  listen 80;
  listen [::]:80 ipv6only=on;

  return 301 https://example.com$request_uri;
}

server {
    server_name example.com;

    listen 443 ssl;

    ssl_certificate     /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    ...

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    error_page 350 = @client;
    error_page 351 = @server;

    location /api/v1/ {
        return 351;
    }

    location / {
        return 350;
    }

    location @client {
        proxy_pass http://client:8081;
    }

    location @server {
        proxy_pass http://server:8080/api/v1/;
    }

}
...