Nginx 기본 설정 및 응용

29818 단어 Nginx
서언
본 고 는 블 로 거들 이 Nginx 를 독학 할 때 정리 한 노트 로 인터넷 여러 곳 에서 자 료 를 수집 하고 정리한다.일부 내용 이 다른 문장 에서 발췌 되 어 문장의 출처 가 이미 명확 하 게 기억 되 지 않 는 다.삭제 하 다.
콘 셉 트
Nginx (engine x 와 발음) 는 비동기 프레임 워 크 의 웹 서버 로 역방향 프 록 시, 부하 분산 기, HTTP 캐 시 로 도 사용 할 수 있 습 니 다.
  • 대리: 생활 속 에서 예 를 들 어 우리 가 일부 업 체 의 전문 점 에 가서 물건 을 사 는 것 이다. 전문 점 은 대리 이 고 대리 되 는 역할 은 바로 업 체 이 며 목표 역할 은 바로 사용자 이다.역방향 프 록 시: 주로 서버 클 러 스 터 분포 식 배치 에 사용 되 는 경우 역방향 프 록 시 는 서버 의 정 보 를 숨 깁 니 다.정방 향 프 록 시: 클 라 이언 트 가 방문 할 서버 주 소 를 매우 명확 하 게 합 니 다.서버 는 어떤 프 록 시 서버 에서 요청 하 는 지 만 알 고 어떤 구체 적 인 클 라 이언 트 에서 왔 는 지 알 지 못 합 니 다.프 록 시 모드 로 실제 클 라 이언 트 정 보 를 차단 하거나 숨 기 고 있 습 니 다.
  • 부하 균형: 서버 가 받 은 요청 을 규칙 에 따라 나 누 어 주 는 과정.하 드 부하: 서버 와 외부 네트워크 사이 에 부하 균형 장 치 를 직접 설치 하고 부하 균형 기 소프트 부하: 한 대 또는 여러 대의 서버 에 해당 하 는 운영 체제 에 하나 이상 의 부가 소프트웨어 를 설치 하여 부하 균형 을 실현 한다
  • .
    기본 설정
    1. 파일 구조 설정
    ...              #   
    
    events {
                  #events 
       ...
    }
    
    http      #http 
    {
         
        ...   #http   
        server        #server 
        {
          
            ...       #server   
            location [PATTERN]   #location 
            {
         
                ...
            }
            location [PATTERN] 
            {
         
                ...
            }
        }
        server
        {
         
          ...
        }
        ...     #http   
    }
    

    2. 구조 상세 설명 : nginx 전역 에 영향 을 주 는 명령 을 설정 합 니 다.일반적으로 nginx 서버 를 실행 하 는 사용자 그룹, nginx 프로 세 스 pid 저장 경로, 로그 저장 경로, 프로필 도입, worker process 수 생 성 등 이 있 습 니 다.events : nginx 서버 에 영향 을 주거 나 사용자 와 의 네트워크 연결 을 설정 합 니 다.모든 프로 세 스 의 최대 연결 수가 있 습 니 다. 어떤 이벤트 구동 모델 을 선택 하여 연결 요 구 를 처리 하 는 지, 여러 개의 네트워크 연결 을 동시에 받 아들 이 고 여러 개의 네트워크 연결 을 직렬 화 할 수 있 는 지 여부 등 이 있 습 니 다.http : 여러 개의 server, 프 록 시, 캐 시, 로그 정의 등 절대 다수의 기능 과 제3자 모듈 의 설정 을 포함 할 수 있 습 니 다.파일 도입, mime - type 정의, 로그 사용자 정의, sendfile 전송 파일 사용 여부, 연결 시간 초과, 단일 연결 요청 수 등.server : 가상 호스트 의 관련 매개 변 수 를 설정 합 니 다. http 에 여러 개의 server 가 있 을 수 있 습 니 다.location : 요청 한 경로 와 각종 페이지 의 처리 상황 을 설정 합 니 다.
    기능.
    Nginx 주요 기능: 1, 프 록 시 서비스 2, 부하 균형 3, 정적 자원 (동정 분리) 4, 캐 시 서비스
    1. 대리 서비스
  • 프 록 시 설정 명령: resolver 명령: DNS 서버 IP 주소 resolver 지정timeout 명령: DNS 도 메 인 이름 해석 시간 초과 proxy 설정 에 사용pass 명령: 프 록 시 서버 를 설정 하 는 프로 토 콜 과 주 소 는 프 록 시 서비스 에 대한 장소 가 많 지 않 기 때문에 명령 이 적 고 기능 도 간단 합 니 다.
  • 역방향 프 록 시 설정 명령: proxypass 명령: 프 록 시 에 있 는 주소 upstream 명령 을 설정 하 는 데 사 용 됩 니 다. 이 설정 은 프 록 시 에 있 는 서버 주 소 를 쓰 고 부하 균형 을 설정 하 는 알고리즘 문법 구조 입 니 다.
  • proxy_pass URL;
    URL      、      IP         。
           "http"  "https"
      upstream proxy_pass         
    (1)proxy_list        
    upstream proxy_list
    {
         
        server http://192.168.1.100:8080/uri/;
        server http://192.168.1.200:8080/uri/;
    }
    server
    {
         
        location /
        {
         
            proxy_pass proxy_list;
        }
    }
    (2)proxy_list      
    upstream proxy_list
    {
         
        server 192.168.1.100:8080/uri/;
        server 192.168.1.200:8080/uri/;
    }
    server
    {
         
        location /
        {
         
            proxy_pass http://proxy_list;
        }
    }
    

    그리고 URL 에 접근 하기 위해 URI 가 포함 되 어 있 는 지 주의해 야 합 니 다. "http://www.test.com/test/index.html예 를 들 면
    server{
         
        server_name www.test.com;
        location /test/
        {
         
            #proxy_pass http://192.168.12.19; --->  "http://192.168.12.19/test/index.html"
            #proxy_pass http://192.168.12.19/index/; --->  "http://192.168.12.19/index/index.html"
            #proxy_pass http://192.168.12.19/; --->  "http://192.168.12.19/index.html"
        }
    }
    

    기타 명령 어:
    location / {
         
         index index.jsp;
         proxy_pass   http://proxy_list;    #         , upstream     
         #               
         proxy_redirect             off;#           ,      301             
         #   Web       X-Forwarded-For      IP
         proxy_set_header           Host $host;
         proxy_set_header           X-Real-IP $remote_addr;
         proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size       10m; #                
        client_body_buffer_size    128k; #                  
        proxy_connect_timeout      300; #nginx            (      )
        proxy_send_timeout         300; #           (      )
        proxy_read_timeout         300; #     ,         (      )
        proxy_buffer_size          4k; #       (nginx)             
        proxy_buffers              4 32k; #proxy_buffers   ,     32k    ,    
        proxy_busy_buffers_size    64k; #        (proxy_buffers*2)
        proxy_temp_file_write_size 64k; #         ,     ,  upstream    
     }
    

    2. 부하 균형
    프 록 시 그룹 설정:
    upstream proxy_list{
          
          server 192.168.1.100:8080;
          server 192.168.1.200:8080;
        }
     server {
         
            ....
            location  ~*^.+$ {
                  
               proxy_pass  http://proxy_list;  #    proxy_list                 
            }
    

    부하 균형 전략 은 주로 다음 과 같은 네 가지 가 있다.
  • 열 비: 서버 가 2 대 있 으 면 서버 한 대가 사고 가 났 을 때 두 번 째 서버 를 사용 하여 서 비 스 를 제공 합 니 다.서버 처리 요청 순서: AAAAAA 갑자기 A 끊 었 어, BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
    upstream proxy_list{
          
          server 192.168.1.100:8080; 
          server 192.168.1.200:8080 backup;  #       
        }
    
  • 폴 링: nginx 는 기본적으로 폴 링 의 가중치 가 모두 1 이 고 서버 처리 요청 의 순서: ABABABABAB...
  • upstream proxy_list{
          
          server 192.168.1.100:8080;
          server 192.168.1.200:8080;       
        }
    
  • 가중 폴 링: 설정 한 가중치 의 크기 에 따라 서로 다른 서버 에 배 포 된 요청 입 니 다.설정 하지 않 으 면 기본 값 은 1 입 니 다.다음 서버 의 요청 순 서 는 ABBABBBABBABB...
  • 입 니 다.
     upstream proxy_list{
          
          server 192.168.1.100:8080 weight=1;
          server 192.168.1.200:8080 weight=2;
    }
    
  • ip_hash: nginx 는 같은 클 라 이언 트 ip 에 같은 서버 를 요청 합 니 다.
  • upstream proxy_list{
          
    	  ip_hash;
          server 192.168.1.100:8080; 
          server 192.168.1.200:8080;
        }
    

    nginx 부하 균형 설정 에 대한 몇 가지 상태 매개 변수 설명.
  • down 은 현재 server 가 부하 균형 에 잠시 참여 하지 않 음 을 나타 낸다.
  • backup, 예비 백업 기기.다른 모든 비 백업 기기 가 고장 나 거나 바 쁠 때 만 백업 기 계 를 요청 하기 때문에 이 기계 의 압력 이 가장 가볍다.
  • max_fails, 요청 실패 횟수 를 허용 합 니 다. 기본 값 은 1 입 니 다.최대 횟수 를 초과 하면 proxy 를 되 돌려 줍 니 다.next_upstream 모듈 정의 오류 입 니 다.
  • fail_timeout, max 를 겪 었 습 니 다.fails 회 실패 후 서 비 스 를 중단 하 는 시간 입 니 다.max_fails 는 failtimeout 같이 사용.
  •  upstream mysvr {
          
          server 192.168.1.100:8080 weight=2 max_fails=2 fail_timeout=2;
          server 192.168.1.200:8080 weight=1 max_fails=2 fail_timeout=1;    
        }
    

    3. 정적 자원 (동정 분리)
    사이트 의 응답 속 도 를 높이 기 위해 프로그램 서버 (Tomcat, Jboss 등) 의 부 하 를 줄 일 수 있 습 니 다. 정적 자원, 예 를 들 어 그림, js, css 등 파일 에 대해 우 리 는 역방향 프 록 시 서버 에서 캐 시 를 할 수 있 습 니 다. 그러면 브 라 우 저 는 정적 자원 을 요청 할 때 프 록 시 서버 는 백 엔 드 서버 에 전송 하지 않 고 직접 처리 할 수 있 습 니 다.사용자 가 요청 한 동적 파일, 예 를 들 어 servlet, jsp 는 Tomcat, Jboss 서버 에 전송 합 니 다. 이것 이 바로 동정 분리 입 니 다.이것 도 역방향 프 록 시 서버 의 중요 한 역할 이다.
    정적 파일 요청: gif, jpg, js, css 등 정적 자원 요청 은 Nginx 에서 처리 합 니 다. 설정 은 다음 과 같 습 니 다.
    location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma|js|css)$
    {
         
        root /usr/webapps;
        expires 30d;
    }
    
  • root /usr/webapps; 이 코드 는 정적 자원 이 있 는 디 렉 터 리 인 Nginx 가 접근 할 디 렉 터 리 를 지정 한 다 는 뜻 입 니 다.
  • expires 30d; 이 자원 파일 들 이 클 라 이언 트 브 라 우 저의 캐 시 시간 을 지정 합 니 다.30d 는 30 일, 1h 는 1 시간 을 가리킨다.

  • 4. 캐 시 서비스
    전체 설정:
    #vim /usr/local/nginx/conf/nginx.conf 
    upstream node {
         
            server 192.9.191.31:8081;
            server 192.9.191.31:8082;
    }
    proxy_cache_path /cache levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m use_temp_path=off;
    server {
         
            listen 80;
            server_name www.test.com;
            index index.html;
            if ($request_uri ~ ^/(static|login|register|password)) {
         
                    set $cookie_nocache 1;
                    }
            location / {
         
                    proxy_pass http://node;
                    proxy_cache     cache;
                    proxy_cache_valid       200 304 12h;
                    proxy_cache_valid       any     10m;
                    add_header      Nginx-Cache     "$upstream_cache_status";
                    proxy_next_upstream     error timeout invalid_header http_500 http_502 http_503 http_504;
                    proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
                    proxy_no_cache $http_pargma $http_authorization;
                    }
            }
    

    매개 변수 설명:
    proxy_cache_path /soft/cache levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m use_temp_path=off;
        #proxy_cache    //        
        #levels         //        
        #keys_zone      //     ,10m:      ,1m   8000key
        #max_size       //      ,   Nginx       
        #inactive       //60             
        #use_temp_path  //    ,     ,    
    
    proxy_cache cache;
    proxy_cache_valid   200 304 12h;
    proxy_cache_valid   any 10m;
    add_header  Nginx-Cache "$upstream_cache_status";
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        #proxy_cache            //    
        #proxy_cache_valid      //   200|304    12h,     10    
        #proxy_cache_key        //  key
        #add_header             //     ,     respoce    
        #proxy_next_upstream    //  502-504   ,                
    
    

    일부 페이지 는 캐 시 를 추가 하지 않 고 다음 설정 을 통 해 이 루어 집 니 다.
    if ($request_uri ~ ^/(static|login|register|password)) {
         
                    set $cookie_nocache 1;
                    }
    

    캐 시 정리:
    1.rm        
    rm -rf /cache/*
    2.  ngx_cache_purge      ,      nginx
    

    전체 nginx 설정:
    user nobody;  #       ,   nobody nobody。
    
    worker_processes 2; #        ,   1
    #pid /nginx/pid/nginx.pid;   #  nginx          
    #error_log log/error.log debug;  #      ,  。           ,http ,server ,     :debug|info|notice|warn|error|crit|alert|emerg
    
    
    events{
         
       accept_mutex on;   #         ,        ,   on
       multi_accept on;  #                  ,   off
       #use epoll;      #      ,select|poll|kqueue|epoll|resig|/dev/poll|eventport
       worker_connections  1024;    #     ,   512
    }
    
    
    http{
         
        #           
        default_type    application/octet-stream;
    
        server_names_hash_bucket_size   128;
        #           headerbuffer  ,   32KB
        client_header_buffer_size   32k;
        #                        ,   4 32KB
        large_client_header_buffers 4 32k;
        #      
        client_max_body_size 356m;
        #nginx HttpLog    ,  nginx       ,     access
        log_format access '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';
        #access      
        access_log  /var/log/nginx/access.log   access;
        #            , tcp_nopush tcp_nodelay       on,        。
        sendfile    on;
        tcp_nopush  on;
        tcp_nodelay on;
        #                
        keepalive_timeout   65;
        server_tokens   off;
        #           
        client_body_buffer_size 512k;
        proxy_connect_timeout   5;
        proxy_send_timeout      60;
        proxy_read_timeout      5;
        proxy_buffer_size       16k;
        proxy_buffers           4 64k;
        proxy_busy_buffers_size 128k;
        proxy_temp_file_write_size 128k;
    
        #  gzip
        gzip    on;
        #          
        gzip_min_length 1k;
        #4    16k            
        gzip_buffers 4 16k;
        #    HTTP    ,   1.1
        gzip_http_version 1.1;
        #gzip   ,  1~9   ,1     ,    ,9     ,    ,  CPU
        gzip_comp_level 2;
        #     
        gzip_types text/plain application/x-javascript text/css application/xml;
        #              gzip     
        gzip_vary   on;
    
        upstream mycluster{
         
                 server 192.168.1.100:8080 weight=1;
                 server 192.168.1.200:8080 weight=1;
                }
    
        server{
         
                listen 8080;
                server_name 192.168.32.228;
                charset    utf-8; #     utf-8;
    
        #location / {
         
        #    root   html;
        #    index  index.html index.htm;
        #}
    
        #location ~ .*\.(jsp|do|action)$
        location / {
         
                proxy_next_upstream http_502 http_504 error timeout invalid_header;
                proxy_pass http://mycluster;
                #       IP
                proxy_set_header   X-Real-IP        $remote_addr; 
                #     Host  
                proxy_set_header   Host             $host; 
                #       ,   IP     
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                #          
                proxy_set_header   X-Forwarded-Proto $scheme;
                deny 127.0.0.1;  #   ip
                allow all; #   ip     
        }
        #      nginx  
        location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
        {
         
                root  /usr/local/webapps;
                expires 30d;
        }
        #      nginx  
        location ~ .*\.(js|css)?$
        {
         
                root /usr/local/webapps;
                expires 1h;
        }
        error_page   500 502 503 504  /50x.html;  
    
        location = /50x.html {
         
            root   html;
        }
    }
    }
    
    
    

    좋은 웹페이지 즐겨찾기