Docker로 VM에 역방향 프록시
3153 단어 nginx도커VirtualBox
이것은 이제 Docker를 사용할 수있게되고 싶은 필자의 시행 착오의 궤적입니다.
줄거리
VM 서버 그룹을 컨테이너로 대체하기 위해 컨테이너에서 VM으로 리버스 프록시하고 싶습니다.
이미지처럼 nginx 컨테이너를 시작하고 VM에 역방향 프록시하도록 설정하고 http 기반 액세스가 VM에서 컨테이너로 향하도록 변경했습니다.
하지만 연결되지 않았습니다.
브라우저에 ERR_SSL_PROTOCOL_ERROR이 표시되어 컨테이너의 nginx가 깨져서 해독할 수 없습니다.
일단 진전이 있었기 때문에 기사로 합니다만, 올바른 이굴은 아직 이해하고 있지 않고, 잘 움직인 케이스의 분석을 근거로 하고 있습니다.
원인 ①SSL 인증서 설치 장소
SSL 인증서가 Deploy 밖에 없기 때문에 오류가 발생했다고 생각합니다.
컨테이너의 리버스 프록시를 사이에 두기 전에는 Deploy가 WAN의 창구가 되었기 때문에 Deploy에 모든 서비스의 SSL 인증서가 설치되어 있습니다.
또한 항상 SSL로 설정되어 있으며 HTTP로 Deploy에 액세스하면 HSTS를 설정 한 후 HTTPS 액세스로 리디렉션됩니다.
그러니까 브라우저는 HTTPS로 통신합니다만, 리버스 프록시 서버에 SSL 증명서가 없기 때문에, 인증할 수 없네요.
SSL 인증서가 Deploy 밖에 없기 때문에 오류가 발생했다고 생각합니다.
컨테이너의 리버스 프록시를 사이에 두기 전에는 Deploy가 WAN의 창구가 되었기 때문에 Deploy에 모든 서비스의 SSL 인증서가 설치되어 있습니다.
또한 항상 SSL로 설정되어 있으며 HTTP로 Deploy에 액세스하면 HSTS를 설정 한 후 HTTPS 액세스로 리디렉션됩니다.
그러니까 브라우저는 HTTPS로 통신합니다만, 리버스 프록시 서버에 SSL 증명서가 없기 때문에, 인증할 수 없네요.
판 사이에 오류가 있었다고 추측할 수 있습니다.
원인 ② 범 미스
SSL 인증서를 Deploy에서 컨테이너의 역방향 프록시로 이동했지만 오류는 해결되지 않았습니다.
이때 컨테이너의 역방향 프록시는 다음과 같은 설정을 했습니다.
server {
listen 80;
listen [::]:80;
server_name [ドメイン名];
include /etc/nginx/params/hsts_params;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name [ドメイン名];
root /var/www/html;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL!eNull:!EXPORT:!DES:!3DES:!MD5:!DSS';
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_certificate /etc/letsencrypt/live/[ドメイン]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[ドメイン]/privkey.pem;
location / {
include /etc/nginx/params/proxy_params;
proxy_pass http://[DeployのローカルIP];
}
}
이해해 주셨습니까?
브라우저에서 HTTP로 액세스했다고 가정합니다.
server {
listen 80;
listen [::]:80;
server_name [ドメイン名];
include /etc/nginx/params/hsts_params;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name [ドメイン名];
root /var/www/html;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL!eNull:!EXPORT:!DES:!3DES:!MD5:!DSS';
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_certificate /etc/letsencrypt/live/[ドメイン]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[ドメイン]/privkey.pem;
location / {
include /etc/nginx/params/proxy_params;
proxy_pass http://[DeployのローカルIP];
}
}
이 세 단계로 무한 루프가 만들어졌습니다.
위 설정 파일의 Deploy로의 전송을 HTTPS로 해주거나 Deploy에서 HTTP도 받아들이도록 하면 문제 해결입니다.
(어느 쪽이 베터인지 모르겠습니다. 가르쳐 주시면 다행입니다.)
(전자라면 리버스 프록시 서버에도 전송처에도 SSL 증명서가 필요하게 되어 버리므로, 후자 쪽이 좋을까라고 생각하고 있습니다.)
향후 전망
이제는 컨테이너의 리버스 프록시를 통해 VM 서버를 지금까지 사용할 수 있습니다.
그리고는 서비스를 하나씩 컨테이너로 해, 리버스 프록시의 방향을 바꾸는 작업의 반복이 됩니다.
크게 분류하여,
5가지 콘텐츠가 있습니다.
순서대로 다루어 작업합니다.
다음 번 : VM의 gitlab을 컨테이너에 (이어서 버전 업 12.0.3 → 13.2.4) (이어서 docker-compose)
Reference
이 문제에 관하여(Docker로 VM에 역방향 프록시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/F_clef/items/e0bbf371398772edc1f7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)