Docker: nginx обратный прокси и как настроить несколько служб (например, на 8080 и 8081) - PullRequest
0 голосов
/ 03 апреля 2020

Я немного застрял с настройкой нескольких служб, где nginx - прокси-сервер.

работает:

docker -v                      
Docker version 19.03.8, build afacb8b7f0

docker-compose -v                              
docker-compose version 1.23.2, build 1110ad01

Я хочу начать с этого теста, все в том же духе docker -compose.yml-файл: ссылка на jwilder / nginx

  1. прокси: nginx -сервер (jwilder / nginx -прокси: 0,7. 0, то есть nginx 1.17.6)
  2. container1: httpd: 2.4
  3. container2: httpd: 2.4

обновление моего / etc / hosts перед тем, как я начало

  1. 127.0.0.1 container1.com
  2. 127.0.0.1 container2.com

Вот мой docker - compose.yml-файл (obs -> версия 3.7)

version: '3.7'

services:

  proxy:
    image: jwilder/nginx-proxy:0.7.0
    container_name: proxy-test
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./nginx-proxy.conf:/etc/nginx/conf.d/nginx-proxy.conf:ro

  container1:
    image: httpd:2.4
    container_name: container-1
    environment:
      - VIRTUAL_HOST:container1.com
    ports:
      - 8080:80

  container2:
    image: httpd:2.4
    container_name: container-2
    environment:
      - VIRTUAL_HOST:container2.com
    ports:
      - 8081:80

вот мой nginx -proxy.conf :

server {
    listen          80;
    server_name     container1.com;
    location / {
        proxy_pass http://localhost:8080;
    }
}

server {
  listen        80;
  server_name   container2.com;

  location / {
    proxy_pass  http://localhost:8081;
  }
}

После этого я запускаю

docker exec container-1 sed -i 's/It works!/Container 1/' /usr/local/apache2/htdocs/index.html И

docker exec container-2 sed -i 's/It works!/Container 2/' /usr/local/apache2/htdocs/index.html


Тест 1: с curl для порта 8080 и порта 8081

curl localhost:8080
response -> Container 1

curl localhost:8081 
response -> Container 2

Тест 2: с curl для container1.com AND container2.com

curl container1.com
status 502
curl container2.com
status 502

Настройки в моей конфигурации ong?

Устранение неполадок 1:

  1. docker exec -it proxy-test bash

  2. Я вижу, что nginx -proxy.conf находится в каталоге (/etc/nginx/conf.d)

  3. / etc / nginx / conf.d / default.conf также там

Устранение неполадок 2: журнал прокси (Connection refused - while connecting to upstream)

proxy-test    | nginx.1    | 2020/04/03 10:52:08 [error] 61#61: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 172.29.0.1, server: container1.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "container1.com"
proxy-test    | nginx.1    | 2020/04/03 10:52:08 [error] 61#61: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 172.29.0.1, server: container1.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "container1.com"

1 Ответ

0 голосов
/ 03 апреля 2020

Найдено 2 решения для этого.

(1) во-первых, обновите nginx -proxy.conf с именем контейнеров вместо указания на http://localhost:8080; и http://localhost:8081;:

новый конфигурационный файл

server {
    listen          80;
    server_name     container1.com;
    location / {
        proxy_pass http://container-1;
    }
}

server {
    listen        80;
    server_name   container2.com;

    location / {
      proxy_pass  http://container-2;
    }
}

(2) Если оставить файл nginx -proxy.conf, docker -compose.yml правильно отобразит вещи.

...