7

我在 osx 上通过boot2docker.

我有 2 台主机:site1.loc.test.comsite2.loc.test.com指向 docker 主机的 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"
4

3 回答 3

7

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

在 github 上进一步阅读

于 2016-06-11T11:27:20.723 回答
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 中覆盖该文件。

于 2015-07-07T22:54:47.707 回答
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容器上。

参考:How SSL Support Worksjwilder /nginx-proxy Docker 镜像部分。

于 2020-04-09T16:36:36.667 回答