Docker로 VM에 역방향 프록시

3153 단어 nginx도커VirtualBox
마지막: VM 서버를 컨테이너로 마이그레이션할 계획
이것은 이제 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 증명서가 없기 때문에, 인증할 수 없네요.
  • HTTPS로 액세스해야합니다
  • 인증할 수 없음

  • 판 사이에 오류가 있었다고 추측할 수 있습니다.

    원인 ② 범 미스



    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 섹션은 HTTPS로 리디렉션됩니다.
  • HTTPS로 액세스하고, 두 번째 server 섹션으로 처리되며, HTTP로 Deploy로 전송합니다.
  • HTTP를 받은 Deploy도 항상 SSL 설정이므로 HTTPS에서 리디렉션 지시를 내립니다.

  • 이 세 단계로 무한 루프가 만들어졌습니다.
    위 설정 파일의 Deploy로의 전송을 HTTPS로 해주거나 Deploy에서 HTTP도 받아들이도록 하면 문제 해결입니다.
    (어느 쪽이 베터인지 모르겠습니다. 가르쳐 주시면 다행입니다.)
    (전자라면 리버스 프록시 서버에도 전송처에도 SSL 증명서가 필요하게 되어 버리므로, 후자 쪽이 좋을까라고 생각하고 있습니다.)

    향후 전망



    이제는 컨테이너의 리버스 프록시를 통해 VM 서버를 지금까지 사용할 수 있습니다.
    그리고는 서비스를 하나씩 컨테이너로 해, 리버스 프록시의 방향을 바꾸는 작업의 반복이 됩니다.
    크게 분류하여,
  • PHP 응용 프로그램 (owncloud)
  • Ruby 기반 애플리케이션 (gitlab)
  • 파이썬 응용 프로그램
  • Node.js제의 어플리케이션
  • 정적 콘텐츠

  • 5가지 콘텐츠가 있습니다.
    순서대로 다루어 작업합니다.

    다음 번 : VM의 gitlab을 컨테이너에 (이어서 버전 업 12.0.3 → 13.2.4) (이어서 docker-compose)

    좋은 웹페이지 즐겨찾기