Поддомены, 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 затем добавит его в свою конфигурацию.