Как сделать контейнеры ngnix доступными через прокси? - PullRequest
0 голосов
/ 18 мая 2018

Допустим, у меня есть три docker-контейнера с nginx.Их открытый порт отображается на 8080, 8181 и 8282 соответственно.Я хочу настроить сервер на 8080, чтобы он передавал / example01 и / example02 двум другим приложениям.Это мой конфигурационный файл:

server {

    listen 80;
    server_name  localhost;

    location / {
        root    /usr/share/nginx/html/;
        index   index.html index.htm;
    }

    location /example01 {
        proxy_pass http://localhost:8181/;
    }

    location /example02 {
        proxy_pass http://localhost:8282/;
    }
}

Так что, если я запускаю контейнеры, каждое из приложений доступно (http://localhost:8080, http://localhost:8181 и http://localhost:8282).

Теперь я не совсем понимаю, почему http://localhost:8080/example01 и http://localhost:8080/example02 неправильно перенаправляют. Вместо этого я получаю ошибку неверного шлюза 502. Это как-то связано с моими открытыми портами и VIRTUAL_PORT?

Заранее спасибо.

1 Ответ

0 голосов
/ 18 мая 2018

Это связано с областью действия контейнерной сети.Эти контейнеры localhost находятся внутри каждого контейнера соответственно - и это не то место, где отображаются ваши порты.Вместо этого выполните:

$ ifconfig

на своем хост-компьютере и найдите свой локальный IP-адрес и проксируйте трафик к вашему хосту - которому сопоставлены порты.

conf:

server {

    listen 80;
    server_name  localhost;

    location / {
        root    /usr/share/nginx/html/;
        index   index.html index.htm;
    }

    location /example01 {
        proxy_pass http://192.168.1.2:8181/;
    }

    location /example02 {
        proxy_pass http://192.168.1.2:8282/;
    }
}

, где 192.168.1.2 - локальный IP-адрес вашего компьютера.

Другим способом было бы связать эти контейнеры, а не прокси через localhost - но псевдоним, который вы предоставили бы в определении ссылки.Я могу уточнить, если вы выберете этот метод.

- отредактируйте с помощью метода связывания -

Для того, чтобы ваши сервисы были связаны, вам нужно использовать докеринструмент docker-compose.Предполагая, что вы знакомы с тем, что это такое (ссылки на документы внизу), вы можете написать такой файл для компоновки:

first-nginx:
   build: first-nginx/
   ports:
      - 8080:80
   links:
      - second-nginx
      - third-nginx

second-nginx:
   build: second-nginx/
   ports:
      - 8081:80

third-nginx:
   build: third-nginx/
   ports:
      - 8082:80

Поместить в корневой каталог вашего проекта, например:

root
  - first-nginx
    + nginx.conf
    + Dockerfile
    + some-other.files
  - second-nginx
    + some.files
    + another-nginx.conf
    + Dockerfile
  - third-nginx
    + some-nginx.conf
    + Dockerfile
  + docker-compose.yml

И вы сконфигурируете «основной» nginx для использования созданных ссылок следующим образом:

conf:

server {

    listen 80;

    location / {
        root    /usr/share/nginx/html/;
        index   index.html index.htm;
    }

    location /example01 {
        proxy_pass http://second-nginx/;
    }

    location /example02 {
        proxy_pass http://third-nginx/;
    }
}

Обязательно спросите, если что-то неясно.

ссылки ref

compose ref

...