子域名,Nginx-proxy和Docker-compose

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

总之,当inputjenkins.192.168.1.2 ,我应该访问由192.168.1.2托pipe的Jenkins与Nginx代理redirect。

快速看看我目前有什么。 如果没有顶级域名,它就无法正常工作,所以它在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服务。

不幸的是,nginx不支持像这样的IP地址上的子域。

你将不得不修改客户端主机文件(你说你不想做)…


或者你可以设置你的nginx像这样重定向:

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

这将允许你访问詹金斯在192.168.1.2/jenkins 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/访问jenkins

如果您已经在使用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 

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