docker nginx 설치 및 https 접근 설정

9451 단어 javaEELinux
1. dockerhub 에서 필요 한 nginx 버 전이 있 는 지 확인 합 니 다.
#docker search nginx
2. 창고 nginx 미 러 를 끌 어 옵 니 다. 버 전 번 호 를 추가 하지 않 고 기본 으로 최신 버 전 을 끌 어 옵 니 다.
#docker pull nginx
3. nginx 용기 시작 
# docker run --detach \
        --name wx-nginx \
        -p 443:443\
        -p 80:80 \
        -v /home/evan/workspace/wxserver/nginx/data:/usr/share/nginx/html:rw\
        -v /home/evan/workspace/wxserver/nginx/config/nginx.conf:/etc/nginx/nginx.conf/:rw\
        -v /home/evan/workspace/wxserver/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf:rw\
        -v /home/evan/workspace/wxserver/nginx/logs:/var/log/nginx/:rw\
        -v /home/evan/workspace/wxserver/nginx/ssl:/ssl/:rw\
        -d nginx

상기 명령 을 실행 한 후 오류 가 발생 할 수 있 습 니 다: Are you trying to mount a directory onto a file (or vice - versa)?Check if the specified host path exists and is the expected type. 홈 호스트 가 nginx 설정 파일 이 용기 nginx 와 일치 하지 않 으 면 마 운 트 할 수 없 기 때문에 상기 명령 의 / home / evan / workspace / wxserver / nginx / config / nginx. conf, / home / evan / workspace / wxserver / nginx / config / conf. d / default. conf 의 nginx. conf, default. conf 는 이 경로 에서 폴 더 가 용기 내부 파일 과 매 핑 될 수 없습니다.
해결: 홈 호스트 에 / home / evan / workspace / wxserver / nginx / config / nginx. conf 폴 더 를 삭제 하고 해당 하 는 nginx. conf 파일 을 만 듭 니 다. 홈 호스트 / home / evan / workspace / wxserver / nginx / config / conf. d / 에서 default. conf 폴 더 를 삭제 하고 default. conf 파일 을 만 듭 니 다. 시작 한 용기 가 시작 되 지 않 았 습 니 다. 시작 되 지 않 은 nginx 용 기 를 먼저 삭제 할 수 있 습 니 다.
1). 모든 용기 조회 \ # docker ps - a 
2) 방금 시작 하지 못 한 nginx 용 기 를 삭제 합 니 다 \ # docker rm nginx 용기 ID
3) 재 집행
# docker run --detach \
        --name wx-nginx \
        -p 443:443\
        -p 80:80 \
        -v /home/evan/workspace/wxserver/nginx/data:/usr/share/nginx/html:rw\
        -v /home/evan/workspace/wxserver/nginx/config/nginx.conf:/etc/nginx/nginx.conf/:rw\
        -v /home/evan/workspace/wxserver/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf:rw\
        -v /home/evan/workspace/wxserver/nginx/logs:/var/log/nginx/:rw\
        -v /home/evan/workspace/wxserver/nginx/ssl:/ssl/:rw\
        -d nginx

4. 서류 준비
  • nginx 의 기본 홈 페이지 html 저장 디 렉 터 리 가 host 디스크 의 디 렉 터 리 에 매 핑 되 었 습 니 다. / home / evan / work space / wxserver / nginx / data
  • nginx 의 설정 파일 이 host 디스크 에 비 친 파일, / home / evan / workspace / wxserver / nginx / config / nginx. conf
  • 1) 위 / home / evan / work space / wxserver / nginx / config / 클립 에 자신 이 만 든 nginx. conf 기본 설정 추가
    #  nginx   
    user  nginx;
    #        CPU    
    worker_processes  1;
    
    #       PID     
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    #          
    events {
            #    work          1024
        worker_connections  1024;
    }
    
    
    http {
            #  mime  
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
            #      
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
            #         
        keepalive_timeout  65;
    
            #  GZIP  
        #gzip  on;
    
        include /etc/nginx/conf.d/*.conf;
    }

    2) 위 / home / evan / workspace / wxserver / nginx / config / conf. d / 에 자신 이 만 든 default. conf 를 끼 워 기본 설정 을 추가 합 니 다.
    server {
        listen    80;       #  80  ,             HTTPs ,       
        server_name  www.buagengen.com;             #  
    
        charset utf-8;
        #access_log  /var/log/nginx/host.access.log  main;
    
            #            
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    
        #        
        #error_page  404              /404.html;
    
        #         /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

    3) / home / evan / work space / wxserver / nginx / data: / usr / share / nginx / html / 폴 더 에 index. html 파일 을 마음대로 만 들 수 있 습 니 다.
    이 럴 때 IP 주 소 를 통 해 nginx 가 정의 하 는 html 파일 에 직접 접근 할 수 있 습 니 다.그러나 이때 의 방문 은 http 에 불과 합 니 다. https 의 방문 은 안 됩 니 다. nginx 서버 에 인증 서 를 추가 해 야 합 니 다.
    ----------------------------------------------------------------------------------------------------------
    5. openssl 을 통 해 인증서 설정 https 생 성 
    위 경로 / home / evan / workspace / wxserver / nginx / ssl / 에 들 어 갑 니 다. 폴 더 아래 에서 다음 작업 을 수행 합 니 다:
    1) server. key 를 설정 합 니 다. 비밀 번 호 를 두 번 설정 해 야 합 니 다.
    #openssl genrsa -des3 -out server.key 1024
    2) 매개 변수 설정, 우선 여 기 는 이전에 설정 한 비밀 번 호 를 입력 한 다음 에 다음 과 같은 정 보 를 입력 해 야 합 니 다. 대충 작성 하면 됩 니 다. 어차피 테스트 용 입 니 다.
    #openssl req -new -key server.key -out server.csr
    3) RSA 비밀 키 쓰기 (이전에 설정 한 비밀 번 호 를 입력 해 야 합 니 다):
    #openssl rsa -in server.key -out server_nopwd.key
    4) 비밀 키 가 져 오기:
    #openssl x509 -req -days 365 -in server.csr -signkey server_nopwd.key -out server.crt
    이 단 계 를 완성 한 후에 우리 가 필요 로 하 는 인증서 파일 과 비밀 키 를 얻 었 습 니 다.
    6. 설정 nginx 추가 ssl 설정
    1) 수정 / home / evan / workspace / wxserver / nginx / config / conf. d / 폴 더 의 설정 파일 default. conf
    server {
        listen    80;       #  80  ,             HTTPs ,       
        listen    443 ssl;
        server_name  www.buagengen.com;             #  
    
        #   ssl
        #ssl on;        #    HTTPs  ,     
        ssl_certificate /ssl/server.crt;
        ssl_certificate_key /ssl/server_nopwd.key;
    
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
    
         #      openssl     
         ssl_protocols  SSLv2 SSLv3 TLSv1.2;
    
         ssl_ciphers  HIGH:!aNULL:!MD5;  #       
         ssl_prefer_server_ciphers  on;   #   SSLv3 TLSv1                 
    
         #            
         location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
         }
    
        #         /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

    nginx 용 기 를 다시 시작 하면 https: / / 를 통 해 ip 에서 nginx 서버 에 접근 하 러 왔 습 니 다.
    비고: EM 가 나타 나 면do_header: bad password read error: 140 B0009: SSL 오류 입 니 다. nginx 시작 할 때 인증서 비밀 번 호 를 입력 해 야 하기 때 문 입 니 다. 해결 방법 은 비밀 키 를 사용 하여 복호화 후 key 를 생 성 할 수 있 습 니 다. 효 과 는 같 습 니 다 ssh 와 연결 차이 가 많 지 않 습 니 다. 암호 재 부팅 면제 효 과 를 얻 을 수 있 습 니 다. 상기 설정 에서
    server_nopwd. key 는 복호화 키 입 니 다. server. key 는 암호 화 된 키 입 니 다. 방금 제 가 설정 한 것 은 복호화 키 입 니 다.
    부록: nginx 의 부하 균형 설정:
    인증 서 는 자체 서명 발급 에 속 하기 때문에 브 라 우 저 에서 인증 하지 않 으 면 안전 하지 않 은 링크 알림 이 나타 날 수 있 습 니 다. 따라서 정식 온라인 에 서 는 정규 인증 서 를 신청 해 야 합 니 다. 현재 상황 에서 브 라 우 저 를 설정 하여 이 알림 을 무시 한 다음 에  브 라 우 저 는 요청 할 때 예 검 메커니즘 에 OPTIONS 요청 을 보 내 서 성공 적 이 고 안전 한 지 판단 합 니 다. nginx 에 대응 하 는 설정 은 다음 과 같 습 니 다.
    upstream hsdfas {   #least_conn;  #least conn 은 연결 수가 가장 적은 server 에 할당 을 요청 합 니 다. ip hash 는 ip 에 접근 하 는 hash 값 에 따라 분 배 됩 니 다. 그러면 같은 클 라 이언 트 의 연속 적 인 웹 요청 은 같은 server 에 배 포 됩 니 다.  #server 192.168.1.79: 8092 weight = 1 max fails = 3; \ # down 은 싱글 전의 server 가 부하 에 잠시 참여 하지 않 거나 backup 기기 다운 이 아 닌 바 쁠 때 backup 기 계 를 요청 합 니 다}  server{    listen   80;       #80 포트 를 검색 합 니 다. 모든 접근 을 강제로 HTTPs 로 해 야 한다 면 이 줄 을 취소 해 야 합 니 다.   listen 443 ssl;        server_name 192.168.1.79;        #열다 ssl on; 이 줄 을 지우 면 ssl 은 443 포트 뒤에 적 습 니 다. http 와 https 의 링크 를 모두 사용 할 수 있 습 니 다.   #ssl on;       #HTTPs 접근 을 강제 하면 이 줄 을 열 어야 합 니 다.   ssl_certificate /ssl/hsdfas.crt;     ssl_certificate_key /ssl/hsdfas_unsecure.key;        ssl_session_cache    shared:SSL:1m;    ssl_session_timeout  5m;        # openssl 지원 형식 으로 암 호 를 지정 합 니 다.   ssl_protocols  SSLv2 SSLv3 TLSv1.2;         ssl_ciphers  HIGH:!aNULL:!MD5;  # 암호 화 방식    ssl_prefer_server_ciphers  on;   # SSLv 3 와 TLSv 1 프로 토 콜 에 의존 하 는 서버 암 호 는 클 라 이언 트 암호 보다 우선 합 니 다.        location / {         proxy_pass   http://hsdfas;         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_set_header X-Forwarded-Proto https;         proxy_ignore_client_abort  on;
           // 브 라 우 저의 사전 검사 메커니즘 을 제거 합 니 다.        if ($request_method = 'OPTIONS') {          add_header Access-Control-Allow-Origin $http_origin;          add_header Access-Control-Allow-Headers Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With;          add_header Access-Control-Allow-Methods GET,POST,OPTIONS,HEAD,PUT;           add_header Access-Control-Allow-Credentials true;           add_header Access-Control-Allow-Headers X-Data-Type,X-Auth-Token;            return 204;        }            client_max_body_size    16m;         client_body_buffer_size 512k;         proxy_connect_timeout   300;         proxy_send_timeout      300;         proxy_read_timeout      300;         proxy_buffer_size       512k;         proxy_buffers        16 512k;         proxy_busy_buffers_size 1024k;         proxy_temp_file_write_size 1024k;         add_header Access-Control-Allow-Origin *;         index index.jsp index.html index.htm;     }             #오류 페이지 를 / 50x. html 로 다시 지정 합 니 다.    error_page   500 502 503 504  /50x.html;     location = /50x.html {         root   /usr/share/nginx/html;     }    }

    좋은 웹페이지 즐겨찾기