Docker 호스트에서 실행되는 여러 웹 사이트 컨테이너가 있습니다. 80 및 443 포트 트래픽을 해당 컨테이너로 올바르게 전달하는 방법은 무엇입니까?
PHP中文网
PHP中文网 2017-06-20 10:05:52
0
2
1382

도와주세요. . Dalao가 작성한 튜토리얼이 있는 경우 기사 링크를 게시할 수도 있습니다. . 바이두를 한 바퀴 돌고 난 뒤 혼수상태에 빠졌습니다. .

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답(2)
習慣沉默

折腾了一个下午,找到了docker的解决方案
github:https://github.com/JrCs/docke...

ㅋㅋㅋ

별도용기(권장방법)

nginx 프록시는 jwilder/docker-gen

이미지와 공식 nginx 이미지를 사용하여 두 개의 별도 컨테이너로 실행될 수도 있습니다.


도커 소켓이 공개적으로 노출된 컨테이너 서비스에 바인딩되는 것을 방지하기 위해 이 작업을 수행할 수 있습니다(nginx 노출 컨테이너에 도커 소켓을 마운트하지 마세요). 보안적인 측면에서는 더 좋습니다.

nginx 프록시를 별도의 컨테이너로 실행하려면 다음이 필요합니다.

1) 템플릿 파일 nginx.tmpl을 docker-gen 컨테이너에 마운트합니다. 다음과 같은 명령을 사용하여 최신 공식 nginx.tmpl을 얻을 수 있습니다.

으아악

2)

환경 변수를 docker-gen 컨테이너의 이름이나 ID로 설정합니다.

NGINX_DOCKER_GEN_CONTAINER예:

    첫 번째 볼륨으로 nginx(공식 이미지)를 시작하세요:
  • 으아악
    두 번째로 공유 볼륨과 템플릿 파일을 사용하여 docker-gen 컨테이너를 시작합니다.
  • 으아악
    그런 다음 이 컨테이너를 시작합니다(NGINX_DOCKER_GEN_CONTAINER 변수는 docker-gen 컨테이너 이름 또는 ID를 포함해야 함):
  • 으아악
  • 그런 다음 이전에 설명한 대로 프록시할 컨테이너를 시작합니다.

    어떤 이유로 docker --volumes-from 옵션을 사용할 수 없는 경우
  • 변수를 사용하여 nginx 컨테이너의 이름이나 ID를 지정할 수 있습니다.

    NGINX_PROXY_CONTAINER

  • 암호화하자

Let's Encrypt 서비스를 사용하여 가상 호스트에 대한 유효한 인증서를 자동으로 생성합니다.

프록시되는 컨테이너에 대해 Let's Encrypt 지원을 활성화하려면 다음 환경 변수를 설정하세요. 이 환경 변수는 프록시될 각 애플리케이션 컨테이너에서 선언되어야 합니다.

  • LETSENCRYPT_HOST

  • LETSENCRYPT_EMAIL

변수는 VIRTUAL_HOST 변수와 동일해야 하며 공개적으로 연결할 수 있는 도메인이어야 합니다. 쉼표 구분 기호로 여러 호스트를 지정하세요.

LETSENCRYPT_HOST variable most likely needs to be the same as the VIRTUAL_HOST다음 환경 변수는 선택 사항이며 Let's Encrypt 클라이언트가 작동하는 방식을 매개 변수화합니다.

  • LETSENCRYPT_KEYSIZE

변수는 요청된 키의 크기를 결정합니다(비트 단위, 기본값은 4096).

LETSENCRYPT_KEYSIZE다중 도메인(SAN) 인증서

다중 도메인(SAN) 인증서를 생성하려면 기본 도메인을
환경 변수의 첫 번째 도메인으로 추가하세요.

테스트 인증서

5개의 인증서/주/도메인 제한이 없는 테스트 인증서를 생성하려면 LETSENCRYPT_TEST environment variable with a value of true(LETSENCRYPT_HOST를 사용하여 인증서를 요청하는 컨테이너에서)을 정의하세요. 모든 컨테이너에 대해 전역적으로 이 작업을 수행하려면 아래 설명에 따라 ACME_CA_URI를 설정하세요.

자동 인증서 갱신

매시간(3600초)마다 인증서가 확인되고 향후 30일(90일/3) 내에 만료되는 모든 인증서가 갱신됩니다.

예:
으아악

선택적 컨테이너 환경 변수

사용자 정의 구성을 위한 선택적 letsencrypt-nginx-proxy-companion 컨테이너 환경 변수입니다.

  • ACME_CA_URI - Directory URI for the CA ACME API endpoint (default: https://acme-v01.api.letsencrypt.org/directory). If you set it's value to https://acme-staging.api.letsencrypt.org/directory letsencrypt는 주당 5개의 인증서/도메인 제한이 없는 테스트 서버를 사용합니다. 컨테이너별로 테스트 인증서를 생성할 수도 있습니다(테스트 인증서 암호화 참조)

예를 들어

으아악
  • DEBUG - Set it to true 진입점 스크립트 디버깅 및 LetsEncrypt 인증서 생성을 활성화하여 구성 문제를 정확히 파악하는 데 도움이 될 수 있습니다.

  • "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true" 라벨 - nginx-proxy 컨테이너에 이 라벨을 설정하여 docker-letsencrypt-nginx-proxy-companion 컨테이너가 이를 프록시로 사용하도록 지시합니다.

  • ACME_TOS_HASH - 다른 CA의 ACME 구현을 지원하기 위해 대체 TOS 해시를 simp_le에 전달해 보겠습니다.

예:

이 컨테이너를 사용하는 방법에 대한 다른 예를 보려면 다음을 참조하세요.

  • Karl Fathi의 예

  • Karl

  • 의 추가 예시
  • 조지 일리스의 예

  • Dmitry의 간단한 Docker 작성 예

注意,这里有个坑,也怪我自己没看清楚,如果镜image已经expose端口就设置VIRTUAL_HOST、LETSENCRYPT_HOST、LETSENCRYPT_EMAIL就行,如果没有就得在设置好三个环境变weight之后自己加入--expose 容器内应用服务端口 参数启动.如果容器是discourse这样的,就得在app.yml内设置好环境变weight之后把端为映射的80:80改为未为未映射프트:80,然后再保存重建启动。

大家讲道理

컨테이너는 호스트의 포트만 직접 바인딩할 수 있으므로(예: 10개의 웹 컨테이너가 있고 이러한 컨테이너는 모두 80 또는 443이 필요하므로 -p 매개변수는 가능하지 않으므로 컨테이너를 게이트웨이 역방향으로 사용하거나) 프록시 컨테이너, -p에는 nginx, nginx 컨테이너 및 php-fpm 및 노드와 같은 기타 웹 컨테이너를 사용합니다. nginx를 역방향 프록시로 통해 액세스하면 인증서도 nginx 서버로 직접 전달되며 443 전달이 가능합니다.

사실 기본적인 내용이지만 docker와는 전혀 관련이 없습니다

이 글은 lnmp 환경입니다.
/a/11...

여러 php-fpm, node 또는 python 백엔드 서비스가 있는 경우 nginx는 다음과 같아야 합니다

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿