子域名,Nginx-proxy和Docker-compose

Iva*_*rag 8 subdomain nginx docker docker-compose devops

我正在寻找一种方法来配置Nginx通过我的服务器的子域访问托管服务.这些服务和Nginx都是用Docker-compose实例化的.

简而言之,在键入时jenkins.192.168.1.2,我应该访问192.168.1.2使用Nginx代理重定向托管的Jenkins .

快速浏览一下我目前拥有的东西.没有顶级域名它不起作用,因此它在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;
      }
}
Run Code Online (Sandbox Code Playgroud)

看看我想要的东西:https://github.com/Ivaprag/devtools-compose

我的总体目标是访问远程docker容器而不修改客户端的DNS服务.

sha*_*876 6

不幸的是,nginx不支持IP地址上的子域.

您可能要修改客户端主机文件(您说您不想这样做)...


或者您可以将nginx设置为重定向,如下所示:

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

location /other-container {
    proxy_pass http://other-container:8080;
}
Run Code Online (Sandbox Code Playgroud)

这将允许您访问jenkins 192.168.1.2/jenkins


或者您可以尝试通过不同的端口为不同的容器提供服务.例如:

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

server {
    listen 8082;
    location / {
        proxy_pass http://other-container:8080;
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

然后访问jenkins 192.168.1.2:8081/


小智 6

如果您已经在使用 docker-compose,我建议您使用 jwilder nginx-proxy 容器。

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

这允许您将无限数量的 Web 服务容器添加到定义的 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
Run Code Online (Sandbox Code Playgroud)

nginx-proxy 挂载主机 docker sock 文件以获取有关正在运行的其他容器的信息,如果其中任何一个设置了 env 变量 VIRTUAL_HOST,则它将其添加到其配置中。