проблема с докером и jwilder/nginx-proxy http/https

Я использую докер на osx через boot2docker.

У меня есть 2 хоста: site1.loc.test.com и site2.loc.test.com указывают на IP-адрес хоста докера.

Оба должны быть доступны через порты 80 и 443.

Поэтому я использую 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"

person falinsky    schedule 07.07.2015    source источник


Ответы (3)


Я думаю, что ваша конфигурация должна быть правильной, но похоже, что это предполагаемое поведение jwilder/nginx-proxy. Посмотрите эти строки в файле nginx.tmpl: https://github.com/jwilder/nginx-proxy/blob/master/nginx.tmpl#L89-L94

Похоже, что если сертификат найден, вас всегда будет перенаправлять на https.


РЕДАКТИРОВАТЬ: я нашел подтверждение в документации

Поведение прокси-сервера при открытых портах 80 и 443 выглядит следующим образом:

  • Если у контейнера есть пригодный для использования сертификат, порт 80 будет перенаправлен на 443 для этого контейнера, так что HTTPS всегда предпочтительнее, когда он доступен.

Вы по-прежнему можете использовать пользовательскую конфигурацию. Вы также можете попробовать переопределить файл nginx.tmpl в новом Dockefile .

person Alexis N-o    schedule 07.07.2015
comment
Спасибо, я пропустил это. - person falinsky; 08.07.2015

Просто чтобы поддерживать эту тему в актуальном состоянии, jwilder/nginx-proxy тем временем ввел для этого флаг: HTTPS_METHOD=noredirect; Для установки в качестве переменной среды.

Дополнительная литература на github

person tworabbits    schedule 11.06.2016

Чтобы обслуживать трафик как в режиме 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 Works для образа Docker jwilder/nginx-proxy.

person Yuci    schedule 09.04.2020