Поддомены, nginx-прокси и Docker-compose

Я ищу способ настроить Nginx для доступа к размещенным службам через поддомен моего сервера. Эти службы и nginx создаются с помощью Docker-compose.

короче говоря, при вводе jenkins.192.168.1.2, Я должен получить доступ к Дженкинсу, размещенному на 192.168.1.2 перенаправлено с прокси Nginx.

быстрый взгляд на то, что у меня в настоящее время есть. Это не работает без имя верхнего домена, поэтому оно отлично работает наplay-with-docker.com, но не локально с например 192.168.1.2.

server {
    server_name jenkins.REVERSE_PROXY_DOMAIN_NAME;
        location / {
            proxy_pass http://jenkins:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Host $host:$server_port;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
}

чтобы посмотреть, что я хочу:https://github.com/Ivaprag/devtools-compose

моя общая цель-получить доступ к удаленным контейнерам docker без изменения службы DNS клиентов.

2 ответов


к сожалению, nginx не поддерживает поддомены на таких IP-адресах.

вам придется либо изменить файл хостов клиентов (что вы сказали, что не хотите делать)...


или вы можете просто настроить Nginx для перенаправления так:

location /jenkins {
    proxy_pass http://jenkins:8080;
    ...
}

location /other-container {
    proxy_pass http://other-container:8080;
}

что позволит вам получить доступ к Дженкинсу в 192.168.1.2/jenkins


или вы можете попробовать и обслуживать различные контейнеры через разные порты. Например:

server {
    listen 8081;
    location / {
        proxy_pass http://jenkins:8080;
        ...
    }
}

server {
    listen 8082;
    location / {
        proxy_pass http://other-container:8080;
        ...
    }
}

а затем получить доступ к Дженкинсу из 192.168.1.2:8081/


Если вы уже используете docker-compose, я рекомендую использовать контейнер jwilder nginx-proxy.

https://github.com/jwilder/nginx-proxy

Это позволяет добавлять неограниченное количество контейнеров веб-служб в серверную часть определенного прокси-сервера nginx, например:

nginx-proxy:
  image: jwilder/nginx-proxy
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - "/etc/nginx/vhost.d"
    - "/usr/share/nginx/html"
    - "/var/run/docker.sock:/tmp/docker.sock:ro"
    - "nginx_certs:/etc/nginx/certs:rw"
nginx:
  build:
   context: ./docker/nginx/
   dockerfile: Dockerfile
  volumes_from:
     - data
  environment:
     VIRTUAL_HOST: www.host1.com
nginx_2:
  build:
   context: ./docker/nginx_2/
   dockerfile: Dockerfile
  volumes_from:
     - data
  environment:
     VIRTUAL_HOST: www.host2.com
apache_1:
  build:
   context: ./docker/apache_1/
   dockerfile: Dockerfile
  volumes_from:
     - data
  environment:
     VIRTUAL_HOST: www.host3.com

nginx-proxy монтирует файл host docker sock, чтобы получить информацию о других работающих контейнерах, если у любого из них есть переменная env VIRTUAL_HOST set затем добавит его в свою конфигурацию.