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

Използвам docker на 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?

docker-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 раздел за jwilder/nginx-proxy Docker изображение.

person Yuci    schedule 09.04.2020