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

时间:2015-07-07 21:57:23

标签: docker https docker-compose reverse-proxy jwilder-nginx-proxy

我通过boot2docker在osx上使用docker。

我有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"

3 个答案:

答案 0 :(得分:5)

为了使这个主题保持最新,jwilder / nginx-proxy同时为它引入了一个标志:HTTPS_METHOD=noredirect;要设置为环境变量。

进一步阅读on github

答案 1 :(得分:4)

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

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

编辑:我找到了确认in the documentation

  

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

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

您仍然可以使用custom configuration。您还可以尝试在新的Dockefile中覆盖文件nginx.tmpl

答案 2 :(得分:2)

要在没有重定向到SSL的情况下以SSL和非SSL模式提供流量,可以包含环境变量HTTPS_METHOD = noredirect(默认为HTTPS_METHOD = redirect)。

必须在要覆盖其默认行为的每个容器上指定HTTPS_METHOD。

这是一个示例Docker Compose文件:

version: '3'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./config/certs:/etc/nginx/certs
    environment:
      DEFAULT_HOST: my.example.com

  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    environment:
      HTTPS_METHOD: noredirect
      VIRTUAL_HOST: my.example.com

注意:如本例所示,必须在HTTPS_METHOD容器而不是app容器上设置环境变量nginx-proxy

参考:jwilder/nginx-proxy Docker映像的How SSL Support Works部分。