我正在寻找一种方法来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,则会将其添加到其配置中。