Назад | Перейти на главную страницу

ошибка 503 при использовании контейнера nginx-proxy, такого как интерфейсный сервер, для доступа к нескольким контейнерам на одном хосте

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

Когда я хочу получить доступ к хосту (по IP-адресу) или контейнерам (например, по host_ip_adress / container1), я получаю как ошибку 503 из nginx. Я хочу получить доступ к моему контейнеру 1 по ip_addrress_host / container1.

Решение, которое я нашел в Интернете, заключалось в том, чтобы установить nginx-proxy интерфейсный сервер (источник: https://blog.florianlopes.io/host-multiple-websites-on-single-host-docker/)

Мой файл для создания докеров: docker-compose.yml

version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock
  site_a:
   image: php:7.0-apache
   expose:
   - "80"
   environment:
   - VIRTUAL_HOST=container1
  volumes:
   - ./php:/var/www/html
 site_b:
   image: php:7.0-apache
   expose:
   - "80"
   environment:
   - VIRTUAL_HOST=container2
   volumes:
   - ./php:/var/www/html

Я запускаю это с команда :

docker-compose up

Мои записи в / etc / hosts файл :

127.0.1.1       container1
127.0.0.1       container2

Журналы, которые я вижу, когда делаю запрос извне:

nginx-proxy_1  | nginx.1    | 192.168.12.28 192.168.12.82 - - [25/Oct/2017:09:46:42 +0000] "GET /container1 HTTP/1.1" 503 615 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
nginx-proxy_1  | nginx.1    | 192.168.12.28 192.168.12.82 - - [25/Oct/2017:09:46:42 +0000] "GET /favicon.ico HTTP/1.1" 503 615 "http://192.168.12.28/container1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"

Спасибо за вашу помощь и извините за мой плохой английский! :-)

Редактировать :

Вот мои логи для контейнера nginx-proxy в начале:

forego     | starting dockergen.1 on port 5000
forego     | starting nginx.1 on port 5100
dockergen.1 | 2017/10/25 14:01:53 Generated '/etc/nginx/conf.d/default.conf' from 3 containers
dockergen.1 | 2017/10/25 14:01:53 Running 'nginx -s reload'
nginx.1    | 2017/10/25 14:01:54 [warn] 30#30: server name "192.168.12.28/container1" has suspicious symbols in /etc/nginx/conf.d/default.conf:60
nginx.1    | 2017/10/25 14:01:54 [warn] 30#30: server name "192.168.12.28/container2" has suspicious symbols in /etc/nginx/conf.d/default.conf:74
dockergen.1 | 2017/10/25 14:01:54 Watching docker events
dockergen.1 | 2017/10/25 14:01:54 Contents of /etc/nginx/conf.d/default.conf did not change. Skipping notification 'nginx -s reload'

Edit2: Я попытался настроить nginx-proxy с помощью конфигурационного файла, предоставленного Павлом Татарчуком (https://serverfault.com/a/880384/441157)

Теперь, когда я делаю запрос вроде http://192.168.12.28/container1 У меня есть этот журнал:

nginx-proxy_1  | nginx.1    | 2017/10/26 08:46:19 [error] 41#41: *1 open() "/etc/nginx/html/container1" failed (2: No such file or directory), client: 192.168.12.82, server: 192.168.12.28, request: "GET /container1 HTTP/1.1", host: "192.168.12.28"

Изменить 3: Добавить ? переписать

nginx-proxy_1  | nginx.1    | 2017/10/26 09:11:00 [error] 31#31: *1 container1 could not be resolved (2: Server failure), client: 192.168.12.82, server: 192.168.12.28, request: "GET /container1 HTTP/1.1", host: "192.168.12.28"

Я хочу получить доступ к моему контейнеру 1 по ip_addrress_host / container1.

Вы уверены, что хотите получить доступ к контейнеру, например, http://127.0.0.1/container1? затем jwilder/nginx-proxy не лучший подход.

Ваш прокси-сервер локально прослушивает порт 80, он будет запрашивать прокси-сервер на container1 и container2 но это не прокси-пути /container1 и /container2.

Завиток

curl -H "Host: container1" localhost

Браузер

Открыть http: // container1


Вы можете прикрепить настраиваемую конфигурацию, которая позаботится о путях прокси для создания ip_address/container-name работай:

  1. Добавьте это в volumes: ./custom.conf:/etc/nginx/conf.d/custom.conf
  2. Создайте custom.conf следующий на docker-compose.yml:

    server {
        server_name 192.168.X.Y;
        listen 80;
    
        location ~ ^/([^/]+)(/.*)? {
            proxy_pass http://$1$2;
        }
    }
    
  3. Связывание контейнеров

    nginx-proxy:
      ...
      links:
        - site_a:container1
        - site_b:container2
    

Это только для начала, вам следует улучшить это в соответствии со своими потребностями. Он должен работать с http: //192.168.X.Y/container1 или http: //192.168.X.Y/container2.

Обратите внимание, что есть перезапись, поэтому http: //192.168.X.Y/container1/some/path проксируется на http: // контейнер1 / некоторые / путь. Я предположил, что вам не нужны запросы с /container1 префикс к месту назначения conatiner.