Nginx 흔 한 설정 요약

14836 단어 nginx
다음은 모두 자신의 프로젝트 에 사 용 된 nginx 에 대한 설정 지식 입 니 다. 다음 과 같은 nginx 에 대한 설정 은 흔히 볼 수 있 는 nginx 에 대한 설정 에 문제 가 없 을 것 입 니 다. 후속 프로젝트 에서 새로운 지식 이 있 으 면 보충 할 것 입 니 다.1. nginx nginx 에 관 한 매 칭 규칙 은 nginx 를 배 울 때 반드시 알 아야 하 는 것 입 니 다. nginx 의 매 칭 규칙 을 알 게 된 것 은 nginx 학습 의 독 이 맥 을 뚫 은 것 과 같 습 니 다. 다음 과 같이 직접 정리 하 겠 습 니 다. 먼저 매 칭 은 location 모듈 에 쓰 여 있 고 일반 매 칭 과 정규 매 칭 으로 나 눌 수 있 습 니 다. 일반 location: ^ ~ = (정확 한 매 칭), 접두사 가 없습니다.(유사 / static /) eg:
location ^~ /static {}
location = /static {}
location /static {}

보통 매 칭, 최 장 매 칭 규칙 에 따라 하나의 요청 이 두 개의 일반 규칙 에 일치 하 는 것 으로 가정 하면 길이 가 큰 것 을 선택 합 니 다. 일반적인 상황 에서 보통 매 칭 에 성공 한 후에 도 정규 매 칭 을 계속 합 니 다. 정규 매 칭 도 성공 하면 정규 매 칭 을 기준 으로 합 니 다. 단, ^ ~ 와 = 을 제외 하고 ^ ~ 와 = 매 칭 에 성공 한 후 에는 정규 매 칭 을 계속 하지 않 습 니 다.
정규 location: ~ (대소 문자 구분), ~ * (대소 문자 구분 하지 않 음) eg:
location ~ /static {}
location ~* /static {}

일반 location 과 정규 location 사이 에는 일반 매 칭 을 한 다음 정규 매 칭 을 합 니 다. 일반적인 경우 일반 매 칭 에 성공 한 후 에는 정규 매 칭 을 계속 합 니 다. 정규 매 칭 도 성공 하면 정규 매 칭 을 기준 으로 합 니 다. 단 ^ ~ 와 = 을 제외 하고 ^ ~ 와 = 매 칭 에 성공 한 후 에는 정규 매 칭 을 계속 하지 않 습 니 다.
먼저 정확 한 일치 규칙 이 있 는 지 확인 하고 있 으 면 정확 한 일치 규칙 을 처리 합 니 다. 정확 한 일치 규칙 이 발견 되면 다른 일치 규칙 을 검색 하지 않 고 현재 일치 하 는 규칙 을 되 돌려 줍 니 다. 그 다음 에 일반 문자 가 일치 하 는 지 확인 합 니 다. 이 일치 요청 은 정규 또는 더 긴 일치 가 있 는 지 확인 해 야 합 니 다. 있 으 면 정규 일치 또는 더 긴 일치 로 돌아 갑 니 다 ^ ~ 세 번 째 에 일치 합 니 다.단계 처리, 이 규칙 과 일치 하 는 것 을 요청 하면 다른 규칙 과 일치 하 는 것 을 중단 하고 이 규칙 을 되 돌려 줍 니 다. 정규 일치 가 마지막 으로 실 행 됩 니 다. 정규 일치 가 찾 으 면 다른 규칙 을 해석 하지 않 습 니 다. 이것 은 우선 순위 에 주의해 야 합 니 다.
또한 다음 URL 과 일치 하 는 접두사 로 끝 나 는 요청: / / 일치 하 는 URL 은 MP3 또는 MP4 로 끝 나 는 요청 입 니 다. $기 호 는 끝 표 지 를 표시 합 니 다. 대소 문 자 를 무시 하기 때문에 방문 접 두 사 는 MP3. mp3 입 니 다.
location ~* \.(mp3|mp4)$ {        
    proxy_pass http://localhost:8080        //     8080  
}
2. nginx 부하 균형 에 대한 설정 은 upstream 설정 을 통 해 이 루어 집 니 다. 다음 인 스 턴 스 를 직접 보 세 요.
upstream web_upstream {
      server 192.168.1.100:8888; 
      server 192.168.1.101:8888;
      server 192.168.1.102:8888;
}

server{ 
    listen 80; 
    server_name www.oone.top; 
    location / { 
        proxy_pass         http://web_upstream; 
        proxy_set_header   Host             $host; 
        proxy_set_header   X-Real-IP        $remote_addr; 
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;  //           ,      IP
    } 
}

이 설정 을 통 해 nginx - s reload 를 설정 한 후 www. oone. top 에 방문 하면 설 정 된 세 개의 부하 균형 server 에 문의 합 니 다. 일반 부하 균형 요청 서버 는 같은 내부 네트워크 에 있 기 때문에 내부 네트워크 주 소 를 직접 사용 하면 됩 니 다. 부하 균형 방안 에 대해 흔히 볼 수 있 는 다음 과 같은 몇 가 지 를 파악 하면 됩 니 다. 1) 문의 (기본 값)기본 옵션 입 니 다. weight 가 시간 을 가리 키 지 않 을 때 각 서버 weight 가 같 습 니 다. 각 요청 은 시간 순서에 따라 서로 다른 백 엔 드 서버 에 배 치 됩 니 다. 백 엔 드 서버 다운 이 떨 어 지면 자동 으로 제거 할 수 있 습 니 다.
upstream bakend {
       server 192.168.1.10;
      server 192.168.1.11;
}

2) weight 는 폴 링 확률 을 지정 합 니 다. weight 와 방문 비율 이 정비례 하여 백 엔 드 서버 의 성능 이 고 르 지 않 은 경우 에 사 용 됩 니 다. 백 엔 드 서버 다운 이 떨 어 지면 자동 으로 제거 할 수 있 습 니 다. 예 를 들 어 아래 설정 은 1.11 서버 의 방 문 량 이 1.10 서버 의 두 배 (백 엔 드 노드 에 높 은 서버 는 weight 를 적 절 히 설정 할 수 있 습 니 다) 입 니 다.
upstream bakend {
server 192.168.1.10 weight=1;
server 192.168.1.11 weight=2;
}

3) ip hash 모든 요청 은 ip 에 접근 하 는 hash 결과 에 따라 분 배 됩 니 다. 그러면 모든 방문객 이 백 엔 드 서버 에 고정 적 으로 접근 하면 session 이 서버 를 뛰 어 넘 지 못 하 는 문 제 를 해결 하고 session 공 유 를 실현 할 수 있 습 니 다. 백 엔 드 서버 다운 이 떨 어 지면 수 동 으로 처리 해 야 합 니 다.
upstream resinserver {
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
3. nginx rewrite nginx 의 rewrite 에 대해 문법 은 rewrite regex replacement [flag] 입 니 다. 그 중에서 flag 는 last 로 현재 명령 을 끝내 고 location 일치, break 종료 현재 rewrite 명령, redirect 임시 재 설정 302, permanent 영구 재 설정 301 로 설정 할 수 있 습 니 다. 예 를 들 어 2 차원 코드 스 캔 은 방문 한 ua 설정 에 따라 서로 다른 url 로 이동 합 니 다.
    location = /app {
        if ($http_user_agent ~* (android)) {
        rewrite ^ http://www.oone.com/download.html redirect;
        }

        if ($http_user_agent ~* (iphone)) {
                rewrite ^ https://itunes.apple.com/cn/app/nikki/id1214764672?mt=8 redirect;
        }
    }  

1) Nginx Rewrite 기본 태그 (flags)
last 는 기본적으로 이 플래그 를 사용 합 니 다. Apache 의 [L] 에 해당 합 니 다.rewrite 가 완료 되 었 음 을 표시 합 니 다. 다음 규칙 break 와 일치 하지 않 습 니 다. Rewirte 를 중단 합 니 다. redirect 와 일치 하지 않 습 니 다. 임시 재 설정 HTTP 상태 302 permanent 는 영구적 으로 재 설정 한 HTTP 상태 301 을 되 돌려 줍 니 다. 기 존의 url 은 정규 를 지원 합 니 다. 재 작성 한 url 은 정규 2 를 지원 하지 않 습 니 다) 정규 표현 식 과 일치 합 니 다. 그 중에서 * ~ 대소 문 자 를 구분 하기 위해 일치 합 니 다 * ~ * 는 크기 를 구분 하지 않 습 니 다.쓰기 일치 *! ~ 와! ~ * 는 대소 문자 가 일치 하지 않 는 지, 대소 문자 가 일치 하지 않 는 지 구분 하지 않 는 지 3) 파일 과 디 렉 터 리 가 일치 합 니 다. 그 중에서 * - f 와! - f 는 파일 이 존재 하 는 지 판단 하 는 데 사 용 됩 니 다 * - d 와! - d 는 디 렉 터 리 가 존재 하 는 지 판단 하 는 데 사 용 됩 니 다 * - e 와! - e 는 파일 이나 목록 이 존재 하 는 지 판단 하 는 데 사 용 됩 니 다 * - x 와! - x 는 파일 이 실행 가능 한 지 판단 하 는 데 사 용 됩 니 다변수, 조건 판단 가능:
$args            	 #             , $query_string
$arg_NAME                #        , “?”   arg_name=arg_value   arg_name
$binary_remote_addr      #           ,     4   
$body_bytes_sent         #          ,        ;     Apache mod_log_config    "%B"      
$bytes_sent              #          
$connection              #TCP      
$connection_requests     #TCP         
$content_length          #     "Content-Length"   
$content_type            #     "Content-Type"   
$cookie_name             #cookie  
$cookie_NAME             #     Header   cookie  ,  "$cookie_"  cookie     ,       cookie    
$document_uri            #  $uri
$document_root           #             
$host                    #   :HTTP       >"HOST"     >         .         ,            ,               
$hostname                #   
$https                   #     SSL    ,  "on",       。
$http_NAME               #         ;         NAME            ,           http   :"Accept-Language",$http_accept_language  
$http_cookie        #   cookie  
$http_host               #    ,           (IP   )
$http_referer            #url    ,                
$http_user_agent         #          
$http_x_forwarded_for
$is_args                 #        ,  "?",       
$limit_rate              #         
$msec                    #   Unix   
$nginx_version           #nginx  
$pid                     #     PID
$pipe                    #          ,  "p",   "."
$proxy_protocol_addr     #               ,       ,       
$query_string            #  $args
$realpath_root           #                  ,               $remote_addr             #    IP  $remote_port             #      $remote_user             #  HTTP          
$request                 #          
$request_body       #        :     location   ,       proxy_pass,fastcgi_pass,uwsgi_pass scgi_pass            
$request_body_file       #                。       ,      。           ,    $request_completion      #      ,  "OK",                         ,   
$request_filename        #           , root alias   URI    $request_length          #      (       ,http        )
$request_method          #HTTP    ,   "GET" "POST"
$request_time            #            ,    ,    ;               ,                        。
$request_uri             #                    URI,     ,   $uri     URI,      ,  :"/cnphp/test.php?arg=freemouse"
$scheme                  #     Web  ,"http"   "https"
$server_addr             #      ,      :      linux    ,  ip            
$server_name             #    
$server_port             #     
$server_protocol         #    HTTP  ,    "HTTP/1.0"   "HTTP/1.1"
$status                  #HTTP    
$time_iso8601            #      ISO 8610  
$time_local              #     (LOG Format   )
$sent_http_NAME          #      http     ;         NAME            ,        Content-length,$sent_http_content_length  $sent_http_cache_control #    
$sent_http_connection   #    
$sent_http_content_type  #    
$sent_http_keep_alive   #    
$sent_http_last_modified #    
$sent_http_location     #    
$sent_http_transfer_encoding #    
$uri                     #      URI(      ,    $args),           $request_uri  ,          ,    index      ,$uri      , "/foo/bar.html"。

nginx 의 rewrite 명령 실행 순서:
1) server 블록 을 실행 하 는 rewrite 명령 (여기 블록 은 server 키워드 후 {} 에 둘러싸 인 영역 을 말 합 니 다. 다른 xx 블록 과 유사 합 니 다)2) location 매 칭 3) 선 택 된 location 의 rewrite 명령 을 실행 합 니 다. 만약 URI 가 재 작성 되 었 다 면, 실제 존재 하 는 파일 을 찾 을 때 까지 1 - 3 을 반복 합 니 다. 10 회 이상 순환 하면 500 Internal Server Error 오 류 를 되 돌려 줍 니 다.

좋은 웹페이지 즐겨찾기