docker nginx 역방향 에이전트 와 부하 균형 설정

5515 단어 docker
1. nginx 가 져 오기 및 설정
전체 사이트 가 docker 를 통 해 배치 되 어야 한다 면 nginx 는 불가 하거나 부족 할 수 있 습 니 다.nginx 설정 을 통 해 부하 균형 과 역방향 대리 서 비 스 를 신속하게 실현 할 수 있 습 니 다.특히 docker 홈 페이지 에 도 마침 nginx 미 러 가 있다.다음 명령 을 통 해 가 져 오기:
$ docker pull nginx:latest

nginx 미 러 의 설정 은 정상적으로 사용 할 때 와 같 습 니 다. 보통 /etc/nginx/conf.d 디 렉 터 리 에 자신의 filename.cnf 파일 을 만 들 면 됩 니 다.다른, docker nginx 는 마 운 트 를 통 해 설정 파일 을 nginx 에 적용 합 니 다.예 를 들 어 로 컬 $HOME/nginx/conf.d 폴 더 에 파일 을 만 들 었 습 니 다. 파일 내용:
upstream backends {
    server app1:8080;
    server app2:80801;
}

server {
    listen        80;
    listen       443 ssl;
    server_name example.com;
    # SSL
    # ssl on; #    ssl    
    ssl_certificate /etc/ssl/certs/example.pem;
    ssl_certificate_key /etc/ssl/certs/example.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    #proxy to webs
    location ~.*/ {
        proxy_redirect off;
        proxy_set_header Host $host;  
        proxy_set_header X-Real-IP $remote_addr;  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
        proxy_pass http://backends;      #          ip+  
    }
}

그 중에서 default.cnf: 명칭 upstream backends {} 의 부하 균형 을 실현 했다.여러 개가 존재 할 수 있 습 니 다. 필요 하 다 면 스스로 다른 것 을 만 들 수 있 습 니 다.backends: 80 포트 감청.listen 80 443 포트 를 감청 하고 ssl 을 엽 니 다.listen 443 ssl;: ssl 인증 서 를 불 러 옵 니 다.미 러 에 있 는 ssl 인증서 파일 의 위 치 를 지정 합 니 다. 인증 서 를 위 에 놓 는 것 을 추천 합 니 다.그들 뒤의 몇 가지 설정 은 모두 ssl 의 기본 설정 이 므 로 수정 할 필요 가 없다.ssl_certificate, ssl_certificate_key: nginx 파일 경로 의 정규 가 일치 합 니 다. 외부 에서 서버 에 대한 접근 을 docker 응용 프로그램 용기 에 자동 으로 할당 하여 이 프로그램 처리 요청 에 전달 합 니 다.
이 파일 은 간단 한 http 접근, https 접근, 그리고 간단 한 부하 균형 을 실현 합 니 다 (서버 에 대한 외부 요청 을 app 1 과 app 2 두 용기 에 무 작위 로 할당 합 니 다).
2. nginx 시작location ~.*/{} 의 설정 을 통 해 우 리 는 nginx 가 다른 두 개의 용기 와 연결 되 어 있 음 을 알 수 있 습 니 다. app 1, app 2 이 고 이 두 용기 와 서로 통신 할 수 있어 야 합 니 다.따라서 nginx 를 시작 하기 전에 다른 두 개의 용 기 를 시작 해 야 합 니 다. 명령 행 기율 위원 회 를 통 해 불편 합 니 다. 우 리 는 docker - compose 의 프로필 작성 방식 으로 nginx 를 시작 합 니 다.파일 내용 은 다음 과 같 습 니 다: docker - compose. yml
version: "3"
services:
  nginx:
    image: nginx
    container_name: nginx
    depends_on:
      - todolist
    ports:
      - "443:443" # https    
      - "80:80" # http    
    volumes:
      - $HOME/etc/nginx/conf.d:/etc/nginx/conf.d #       
      - $HOME/etc/ssl/certs:/etc/ssl/certs #       
    links:
      - app1 #     docker run    --link
      - app2

  app1: #        (   container_name,docker-compose         )
    image: web #        ,             
    container_name: app1 #        ,  docker-compose         
    ports:
      - "8080:8080" #          。     docker   
  app2:
    image: web
    container_name: app2
    ports:
      - "8081:8081" #          。     docker   

위 파일 이 있 는 디 렉 터 리 에서 다음 명령 을 실행 하면 nginx 를 시작 하여 설정 결 과 를 체험 할 수 있 습 니 다.
$ docker-compose up -d

주의해 야 할 곳:
1. nginx 미 러 는 두 포트 upstream80 를 노출 시 켰 다.http 방식 으로 접근 하려 면 포트 443 를 매 핑 해 야 합 니 다.https 방식 으로 접근 하려 면 포트 80 를 매 핑 해 야 합 니 다.기본 값 을 동시에 비 추 면 됩 니 다. 설정 을 업데이트 하 는 것 이 편리 합 니 다.2. docker - compose 에서 미 러 의 이름 을 지정 하고 443 속성 을 사용 합 니 다.나 는 인터넷 의 많은 튜 토리 얼 을 보 았 지만 nginx 의 시작 문제, 특히 포트 맵 에 대해 언급 하지 않 았 다.시작 할 때 맵 container_name 포트 가 없 으 면 443 접근 또는 http 접근 을 따로 설정 합 니 다. 문제 가 발생 하지 않 습 니 다. 두 사람 이 동시에 접근 할 수 있 도록 설정 하거나 https 다시 http 로 설정 하려 면 문제 가 발생 할 수 있 습 니 다.흔히 볼 수 있 는 것 은 현지 https 에서 다음 과 같은 결과 가 나 타 났 다.
curl: (35) gnutls_handshake() failed: An unexpected TLS packet was received.

좋은 웹페이지 즐겨찾기