전단 개발 nginx 상용 기능 의 server & location 일치 규칙 파악

6995 단어
nginx 는 주로 회사 운영 학생 들 이 반드시 파악 해 야 할 지식 으로 역방향 대리, 부하 균형 등 서버 설정 과 관련된다.전단 개발, 특히 순 전단 개발 에 있어 nginx 에 대한 접촉 이 많 지 않 지만 일부 상황 에서 nginx 는 전단 자체 가 해 야 합 니 다.예 를 들 어 우리 회사 의 개발 환경 과 테스트 환경 은 qa 가 설정 을 해결 하 는 데 도움 을 줄 수 있 지만 전단 모듈 이나 모듈 nginx 설정 이 새로 추 가 될 때마다 qa 에 게 부탁 합 니 다. 다른 사람 을 귀 찮 게 하 는 것 은 자신 이 하 는 것 보다 못 합 니 다. 그러면 자신의 수 요 를 더욱 이해 할 수 있 습 니 다.이것 은 모두 전단 개발 이 nginx 에 대한 이해 가 필요 합 니 다. 다음은 nginx 의 가장 기본 적 인 server 와 location 일치 규칙 을 말 합 니 다.
1. 서버 일치 규칙
nginx 의 server 블록 은 여러 개 를 설정 할 수 있 습 니 다. 그러면 하나의 요청 은 그 server 블록 과 일치 합 니 다. 이것 은 주로 server 블록 server_namelisten 에 따라 결 정 됩 니 다.그 중에서 server_name 요청 한 "Host" 헤드 만 검사 하여 이 요청 을 어느 가상 호스트 가 처리 해 야 할 지 결정 합 니 다.
먼저 예 를 하나 봅 시다.
server {
    listen      8001;
    server_name *.net;
}

server {
    listen      8001;
    server_name baidu.net;
}

server {
    listen      8001;
    server_name baidu.*;
}

테스트 를 통 해 같은 listen 포트 를 발견 한 경우 여러 server 의 일치 순 서 는 다음 과 같 습 니 다.
  • 완전 매 칭 우선 순위 가 가장 높 고 매 칭 은 종료
  • 어댑터 가 앞의 우선 순위 다음, 예 를 들 어 *. com
  • 어댑터 가 뒤에 있 는 우선 순위, 예 를 들 어 baidu. *
  • 정규 매 칭 우선 순위 가 가장 낮 습 니 다. 예 를 들 어 ~ ^. www. test. com $
  • 이상 이 일치 하지 않 으 면 기본 server, 즉:
  • listen 설정 항목 을 우선 선택 한 후 default 또는 defaultserver 의 server, 없 으 면:
  • listen 포트 와 일치 하 는 첫 번 째 server 블록 을 찾 습 니 다
  • nginx 에서 하나의 listen 포트 에 만 server 블록 을 설정 하면 nginx 는 이 포트 의 server 에 따라name 일치 합 니 다.하나의 server 도 메 인 만 있 기 때문에 위 에 일치 하 는 규칙 이 없 는 경우 첫 번 째 listen 포트 와 일치 하 는 server 블록 을 갑 니 다.
    server {
        listen    8001;
        server_name baidu.net;
    }
    server { # server    listen  ,root     80  , root    8080
        server_name server.com; 
    }

    위 8001 포트 에 server 가 하나 밖 에 없 는 경우 모든 servername 접근 server_name:8001 은 위의 server 블록 과 일치 합 니 다.
    또 다른 특수 한 상황 에서 server 블록 이 설정 한 가상 호스트 는 도 메 인 이름과 IP 를 혼합 한 것 입 니 다.다음 과 같다.
    server {
        listen      192.168.1.1:8001;
        server_name example.org www.example.org;
        ...
    }
    server {
        listen      192.168.1.1:8002;
        server_name example.com www.example.com;
        ...
    }

    이 경우 일치 하 는 순 서 는:
  • 우선 요청 한 IP 주소 와 포트 가 특정한 server 설정 블록 에 있 는 listen 명령 설정 과 일치 하 는 지 확인 하고 일치 하면 이 server 블록 에 명중 합 니 다. 그렇지 않 으 면 다음 과 같이 실 행 됩 니 다
  • 그 다음 에 요청 한 Host 헤드 가 이 server 블록 중의 한 server 와 일치 하 는 지 확인 합 니 다.name 의 값 은 이 명중 과 일치 합 니 다. 그렇지 않 으 면 기본 server 로 갑 니 다.

  • 두 번 째 는 요청 한 Host 헤드 가 server 와 일치 하 는 지 확인 하기 위해 보충 이 필요 합 니 다.name, 하나의 조건 을 만족 시 키 려 면 servername 에서 지정 한 도 메 인 이름 은 현재 nginx 설정 이 있 는 기계 에 접근 할 수 있 습 니 다. 도 메 인 이름 으로 nginx 가 있 는 기 계 를 방문 하 는 것 은 결국 ip 형식 으로 접근 하기 때 문 입 니 다.
    예 를 들 어 www. example. org 를 방문 하여 최종 적 으로 dns 를 통 해 nginx 가 있 는 ip 주 소 를 분석 하여 방문 한 경우 이 server 가 8001 포트 를 감청 하기 때문에 www. example. org: 8001 을 통 해 192.168.1.1: 8001 이 있 는 server 블록 을 명중 시 킬 수 있 습 니 다.
    2. 위치 일치 규칙
    하나의 예시:
    location  = / {
      #      / ,             
      [ configuration A ]
    }
    
    location  / {
      #           /   ,              
      #                
      [ configuration B ]
    }
    
    location /documents/ {
      #       /documents/      ,      ,        
      #                 ,          
      [ configuration C ]
    }
    
    location ~ /documents/Abc {
      #       /documents/Abc      ,      ,        
      #                 ,          
      [ configuration CC ]
    }
    
    location ^~ /images/ {
      #       /images/      ,      ,        ,     。
      [ configuration D ]
    }
    
    location ~* \.(gif|jpg|jpeg)$ {
      #       gif,jpg jpeg      
      #   ,     /images/        config D   ,   ^~          
      [ configuration E ]
    }
    
    location /images/ {
      #       /images/,    ,    ^~   
      [ configuration F ]
    }
    
    location /images/abc {
      #         /images/abc,    ,    ^~   
      # F G           
      [ configuration G ]
    }
    
    location ~ /images/abc/ {
      #      config D    :      config G      ,      ,        ,  
        [ configuration H ]
    }
    
    location ~* /js/.*/\.js {
      #         
      [ configuration I ]
    }
  • = 로 시작 하여 정확 한 매 칭 을 표시 하고 매 칭 은 후속 검색 을 중지 합 니 다.A 에서 루트 디 렉 터 리 의 끝 에 만 일치 하 는 요청 이 있 으 면 다음 에 문자열 을 가 져 올 수 없습니다.
  • ^~ 로 시작 하여 uri 가 특정한 일반적인 문자열 로 시작 하 는 것 을 표시 합 니 다. 정규 일치 가 아니면 후속 검색 을 중지 합 니 다. 정규 일치 도 포함 하고 최 장 일치 원칙
  • 을 지원 합 니 다.
  • 대소 문 자 를 구분 하 는 정규 일치 ~ 로 시작한다.
  • 대소 문 자 를 구분 하지 않 는 정규 일치
  • ~* 로 시작 합 니 다.
  • / 로 공통 적 으로 일치 합 니 다. 다른 일치 가 없 으 면 모든 요청 이 일치 합 니 다
  • 위치 순서 no 우선 순위:
    location 의 우선 순위 에 대해 세 가 지 를 인지 해 야 합 니 다.
  • 일반 위치 와 일치 한 다음 정규 위치 와 일치 합 니 다.정규 가 보통
  • 을 덮어 쓰기 때문이다.
  • 일반 location 매 칭 은 순서 와 무관 하 며 원칙 을 사용 하기 때 문 입 니 다.정규 location 매 칭 은 순서 와 관련 이 있 지만 정규 location 은 여전히 원칙
  • 을 사용한다.
  • 일반 location 지정 ^~ 은 이 일반 규칙 이 일치 하면 후속 매 칭 을 하지 않 습 니 다. 정규 매 칭 이라도.= 엄격 한 매 칭 이 매 칭 되면 후속 정규 매 칭 이 되 지 않 습 니 다
  • 따라서 location 의 우선 순 위 는 다음 과 같 습 니 다.
    (location =) > (location ^~   ) > (location ~,~*     ) > (location     )  >  (location       ) > (/)

    위의 location 쓰기 에 따라 다음 과 같은 일치 하 는 예제 가 성립 됩 니 다.
  • / - > config A 정확하게 일치 합 니 다. / index. html 도 일치 하지 않 습 니 다
  • / downloads / download. html - > config B B 와 일치 한 후 아래 에 일치 하 는 것 이 없 으 며 B
  • 를 사용 합 니 다.
  • / images / 1. gif - > configuration D 는 F 에 일치 하고, 아래로 D 에 일치 하 며, 아래로 정지
  • / images / abc / def - > config D 최 장 은 G 와 일치 하고, 아래 는 D 와 일치 합 니 다. 아래 를 멈 추 면 / images / 로 시작 하 는 모든 것 이 D 와 일치 하고 멈 추 는 것 을 볼 수 있 습 니 다. FG 는 여기에 쓰 여 있 는 것 은 아무런 의미 가 없습니다. H 는 영원히 돌아 가지 않 습 니 다. 여 기 는 일치 하 는 순 서 를 설명 하기 위 한 것 입 니 다
  • / documents / document. html - > config C C 에 일치 하고 아래 에 일치 하지 않 으 며 C
  • 를 사용 합 니 다.
  • / documents / 1. jpg - > configuration E C 에 일치 하고 아래 정규 E
  • 에 일치 합 니 다.
  • / documents / Abc. jpg - > config CC 최 장 C 까지, 아래 정규 순 서 는 CC 까지, E 까지 내 려 가지 않 습 니 다
  • 실제 사용 제안
           ,               ,  :
    #       ,              ,         ,     。
    #                ,          
    #        
    location = / {
        proxy_pass http://tomcat:8080/index
    }
    #                 ,  nginx  http      
    #        ,         ,         
    location ^~ /static/ {
        root /webroot/static/;
    }
    location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
        root /webroot/res/;
    }
    #           ,                
    #               ,        
    #            , .php,.jsp        
    location / {
        proxy_pass http://tomcat:8080/
    }

    레 퍼 런 스
  • https://tengine.taobao.org/nginx_docs/cn/docs/http/request_processing.html
  • http://tengine.taobao.org/book/chapter_02.html
  • http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
  • http://www.nginx.cn/216.html
  • http://www.ttlsa.com/nginx/nginx-rewriting-rules-guide/
  • http://fantefei.blog.51cto.com/2229719/919431
  • http://seanlook.com/2015/05/17/nginx-location-rewrite/
  • 좋은 웹페이지 즐겨찾기