docker和jwilder/nginx-proxy http/https问题

fal*_*sky 4 https reverse-proxy docker docker-compose jwilder-nginx-proxy

我在osx上使用docker via boot2docker.

我有2个主机:site1.loc.test.comsite2.loc.test.com指向docker host的ip地址.

两者都应该通过80443端口可用.

所以我jwilder/nginx-proxy用于反向代理目的.

但事实上,当我docker-compose每次尝试通过80端口打开时,我都会运行所有这些,我会重定向到443 (301 Moved Permanently).

可能是我错过了一些jwilder/nginx-proxy配置?

泊坞窗,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"
Run Code Online (Sandbox Code Playgroud)

Ale*_*N-o 6

我认为您的配置应该是正确的,但似乎这是jwilder/nginx-proxy. 请参阅文件中的这些行nginx.tmplhttps : //github.com/jwilder/nginx-proxy/blob/master/nginx.tmpl#L89-L94

似乎如果找到证书,您将始终被重定向到 https。


编辑:我在文档中找到了确认

当端口 80 和 443 暴露时,代理的行为如下:

  • 如果容器具有可用的证书,则端口 80 将重定向到该容器的 443,以便在可用时始终首选 HTTPS。

您仍然可以使用自定义配置。您也可以尝试nginx.tmpl在新的 Dockefile 中覆盖该文件。


two*_*its 6

只是为了让这个话题的最新的jwilder/nginx的代理同时介绍了该标志:HTTPS_METHOD=noredirect; 要设置为环境变量.

进一步阅读github