역방향 프록시 서버는 일반적으로 웹 서버 앞에 위치하며 웹 서버 자체에는 없는 첨부 기능을 제공할 수 있는 서버입니다.
예를 들어 역방향 프록시는 SSL 종료, 로드 밸런싱, 요청 라우팅, 캐싱, 압축 및 A/B 테스트까지 제공할 수 있습니다.
Docker 컨테이너로 웹 서비스를 실행할 때 역방향 프록시를 실행하면 배포가 단순화될 수 있습니다.
**
Docker에 역방향 프록시를 사용하는 이유는 무엇인가요?
**
Docker 컨테이너에는 임의의 IP와 포트가 할당되므로 클라이언트 관점에서 이러한 컨테이너를 찾기가 어렵습니다. 기본적으로 이러한 IP와 포트는 비공개이며 호스트에 바인딩되지 않는 한 외부에서 액세스할 수 없습니다.
컨테이너를 호스트에 바인딩하면 컨테이너가 동일한 포트에서 실행되는 것을 방지할 수 있습니다. 예를 들어, 한 번에 하나의 Docker만 포트 80에 바인딩할 수 있습니다. 또한 이로 인해 새 버전의 컨테이너 배포가 복잡해집니다. 새 버전은 이전 버전이 서비스를 중지한 후에만 서비스를 시작할 수 있기 때문입니다.
역방향 프록시는 다운타임을 0으로 제공하여 안정성을 향상시키면서 위의 문제를 해결할 수 있습니다.
**
역방향 프록시 구성 생성
역방향 프록시 구성 설정은 컨테이너가 시작되고 중지될 때 수행해야 하는 책임 있는 작업입니다. 종종 구성을 수동으로 업데이트해야 하는데, 이는 시간이 많이 걸리고 오류가 발생하기 쉽습니다.
다행히 docker는 쉽게 관찰할 수 있고 이미 구성된 메타데이터인 컨테이너의 IP 및 포트에 액세스할 수 있는 원격 호출 API을 제공합니다. 또한 docker는 컨테이너가 시작되고 중지될 때 알림을 보내는 데 사용할 수 있는 실시간 eventAPI도 제공합니다. 이러한 API를 사용하여 역방향 프록시 구성을 자동으로 생성할 수 있습니다.
docker-gen은 작은 애플리케이션입니다. Docker의 API를 사용하여 컨테이너의 메타데이터를 템플릿으로 가져옵니다. 템플릿을 생성한 후 이를 사용하여 서비스를 다시 시작할 수 있습니다.
docker-gen을 사용하면 nginx 구성을 자동으로 생성하고 구성이 변경되면 nginx를 다시 로드할 수 있습니다. Docker 로그 관리에도 동일한 방법을 사용할 수 있습니다.
**
nginx 리버스 프록시 for docker
**
다음 nginx 템플릿 예제를 사용하여 Docker 컨테이너에 대한 리버스 프록시 구성을 생성할 수 있습니다. 이 템플릿은 golang을 사용합니다. groupby 템플릿 함수 는 실행 중인 컨테이너 를 그룹 으로 그룹화하는 데 사용됩니다. 그룹화는 VIRTUAL_HOST 환경 변수 를 기반으로 합니다. 이 방법은 로드 밸런싱된 백엔드를 생성하기 위해 컨테이너 순회를 단순화하고 가동 중지 시간 없는 배포도 지원합니다.
{{ range
containers := groupBy "Env.VIRTUAL_HOST" }}
업스트림 {{
호스트 }} {
{ { 범위
value := containers }}
{{ with
address := index value.Addresses 0 }}
서버 { {
주소.IP }}:{{ $주소.포트 }}
{{ end }}
{{ end }}
}
서버 {
#ssl_certificate /etc/nginx/certs/demo.pem;
#ssl_certificate_
key /etc/nginx/certs/demo.key;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; server_name {{ $host }}; location / { proxy_pass http://{{ $host }}; include /etc/nginx/proxy_params; }}
{{ end }}
docker-gen -only-exposed -watch -notify " /etc/init.d/nginx reload” template/nginx.tmpl /etc/nginx/sites-enabled/default
-only-exposed - 仅使用暴露出端口的容器. -watch - 运行后,观察容器的事件,并重新生成模板. -notify "/etc/init.d/nginx reload" - 重新加载nginx. templates/nginx.tmpl - nginx模板. /etc/nginx/sites-enabled/default - 目标文件.다음은 두 개의 컨테이너로 구성된 데모1과 데모2업스트림 데모1.localhost {
서버 172.17.0.4:5000
서버 172.17.0.3:5000
}
#ssl_certificate /etc/nginx/certs/demo.pem
#ssl_certificate_key /etc/nginx/certs/demo.key;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; server_name demo1.localhost; location / { proxy_pass http://demo.localhost; include /etc/nginx/proxy_params; }}업스트림 데모2.localhost {
서버 172.17.0.5:5000
}
#ssl_certificate /etc/nginx/certs/demo.pem
#ssl_certificate_key /etc/nginx/certs/demo.key;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; server_name demo2.localhost; location / { proxy_pass http://demo2.localhost; include /etc/nginx/proxy_params; }}**
사용해 보세요
**제가 만든 빌드를 사용해 볼 수 있습니다.https://index.docker.io/u/jwilder/nginx-proxy/ nginx 프록시 컨테이너 실행:
HTTPS를 사용하고 다른 컨테이너를 실행하려는 경우
github에서 프로젝트를 확인하여 자세한 내용을 확인할 수 있습니다.
**결론
**Docker API를 사용하여 Docker 컨테이너에 대한 nginx 역방향 프록시 구성 생성을 자동으로 수행할 수 있습니다. 이 접근 방식은 배포를 단순화하고 가용성을 향상시킵니다.
Docker에 역방향 프록시를 사용하는 이유는 무엇인가요?
**Docker 컨테이너에는 임의의 IP와 포트가 할당되므로 클라이언트 관점에서 이러한 컨테이너를 찾기가 어렵습니다. 기본적으로 이러한 IP와 포트는 비공개이며 호스트에 바인딩되지 않는 한 외부에서 액세스할 수 없습니다.
역방향 프록시 구성 생성
** 역방향 프록시 구성 설정은 컨테이너가 시작되고 중지될 때 수행해야 하는 책임 있는 작업입니다. 종종 구성을 수동으로 업데이트해야 하는데, 이는 시간이 많이 걸리고 오류가 발생하기 쉽습니다. 다행히 docker에서는 이미 구성된 메타데이터인 컨테이너의 IP와 포트를 쉽게 관찰하고 접근할 수 있는 원격 호출 API를 제공합니다. 또한 docker는 컨테이너가 시작되고 중지될 때 알림을 보내는 데 사용할 수 있는 실시간 이벤트 API도 제공합니다. 이러한 API를 사용하여 역방향 프록시 구성을 자동으로 생성할 수 있습니다. docker-gen은 작은 애플리케이션입니다. Docker의 API를 사용하여 컨테이너의 메타데이터를 템플릿으로 가져옵니다. 템플릿을 생성한 후 이를 사용하여 서비스를 다시 시작할 수 있습니다. docker-gen을 사용하면 nginx 구성을 자동으로 생성하고 구성이 변경되면 nginx를 다시 로드할 수 있습니다. Docker 로그 관리에도 동일한 방법을 사용할 수 있습니다. **nginx 리버스 프록시 for docker
**다음 nginx 템플릿 예제를 사용하여 Docker 컨테이너에 대한 리버스 프록시 구성을 생성할 수 있습니다. 이 템플릿은 golang을 사용합니다. groupby 템플릿 함수는 실행 중인 컨테이너를 그룹화하는 데 사용됩니다. 그룹화는 VIRTUAL_HOST 환경 변수를 기반으로 합니다. 이 방법은 로드 밸런싱된 백엔드를 생성하기 위해 컨테이너 순회를 단순화하고 가동 중지 시간 없는 배포도 지원합니다.
containers := groupBy
"Env.VIRTUAL_HOST" }} 업스트림 {{
호스트 }} {
{{ 범위
값 := 컨테이너 }}
주소 := 색인
address.IP }}:{{ $address.Port }};
{{ 종료 }} {{ 종료 }}}
#ssl_certificate_key /etc/nginx/certs/demo.key;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; server_name {{ $host }}; location / { proxy_pass http://{{ $host }}; include /etc/nginx/proxy_params; }
docker-gen -only-exposed -watch -notify “/etc/ init .d/nginx reload” template/nginx.tmpl /etc/nginx/sites-enabled/default
-only-exposed - 仅使用暴露出端口的容器. -watch - 运行后,观察容器的事件,并重新生成模板. -notify "/etc/init.d/nginx reload" - 重新加载nginx. templates/nginx.tmpl - nginx模板. /etc/nginx/sites-enabled/default - 目标文件.
upstream deco1.localhost {
서버 172.17.0.4:5000
}
#ssl_certificate /etc/nginx/certs/demo.pem
#ssl_certificate_key /etc/nginx/certs/demo.key;gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; server_name demo1.localhost; location / { proxy_pass http://demo.localhost; include /etc/nginx/proxy_params; }
}
서버 {
#ssl_certificate_key /etc/nginx/certs/demo.key;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; server_name demo2.localhost; location / { proxy_pass http://demo2.localhost; include /etc/nginx/proxy_params; }
}
**
사용해 보세요
**
제가 만든 빌드를 사용해 볼 수 있습니다. https://index.docker.io/u/jwilder/nginx-proxy/
nginx 프록시 컨테이너 실행:
docker run -e VIRTUAL_HOST=foo.bar.com -t …if HTTPS를 사용하고 다른 컨테이너를 실행하려면 github에서 프로젝트를 확인하여 자세한 내용을 확인하세요. **
**
Docker API를 사용하여 Docker 컨테이너에 대한 nginx 역방향 프록시 구성 생성을 자동으로 수행할 수 있습니다. 이 접근 방식은 배포를 단순화하고 가용성을 향상시킵니다. 이 솔루션은 단일 호스트에서 실행되는 컨테이너에 매우 편리합니다. 분산 호스트에 대한 구성 종속성 서비스 검색을 제공합니다. Docker 서비스가 발견한 내용을 살펴보고 해결책을 찾을 수 있습니다.위 내용은 Docker를 사용하여 nginx 역방향 프록시 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!