docker和jwilder / nginx-proxy http / https问题
我通过boot2docker
在osx上使用boot2docker
。
我有2台主机: site1.loc.test.com
和site2.loc.test.com
指向了site1.loc.test.com
主机的ip地址。
两者都应该可以通过80
和443
端口。
所以我使用jwilder/nginx-proxy
进行反向代理。
但实际上,当我通过docker-compose
运行所有的端口时,每次尝试通过80
端口打开时,我都会redirect到443
(301 Moved Permanently)
。
可能是我错过了jwilder/nginx-proxy
configuration中的东西?
泊坞窗,compose.yml
proxy: image: jwilder/nginx-proxy volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - certs:/etc/nginx/certs ports: - "80:80" - "443:443" site1: image: httpd:2.4 volumes: - site1:/usr/local/apache2/htdocs environment: VIRTUAL_HOST: site1.loc.test.com expose: - "80" site2: image: httpd:2.4 volumes: - site2:/usr/local/apache2/htdocs environment: VIRTUAL_HOST: site2.loc.test.com expose: - "80"
我认为你的configuration应该是正确的,但似乎这是jwilder/nginx-proxy
的预期行为。 在文件nginx.tmpl
查看这些行: https : //github.com/jwilder/nginx-proxy/blob/master/nginx.tmpl#L89-L94
看来,如果find了证书,你将永远被redirect到https。
编辑:我在文档中find确认
当端口80和443被暴露时代理的行为如下:
- 如果一个容器有一个可用的证书,端口80将redirect到该容器的443,所以HTTPS总是首选的时候可用。
您仍然可以使用自定义configuration 。 您也可以尝试在新的Dockefile中覆盖文件nginx.tmpl。
为了使这个主题保持最新,jwilder / nginx-proxy同时引入了一个标志: HTTPS_METHOD=noredirect
; 被设置为环境variables。
在github上进一步阅读