Nginx rewrite 재 작성 모듈

4373 단어 nginx
  • ngnix 디 렉 터 리
  • rewrite 소개
  • nginx 의 재 작성 모듈 은 간단 한 정규 표현 식 과 가상 중첩 기 를 결합 하 는 것 입 니 다.PCRE 라 이브 러 리 에 의존 하기 때문에 pcre 를 설치 해 야 합 니 다.관련 변수 에 따라 방향 을 바 꾸 고 서로 다른 설정 을 선택 하면 한 location 에서 다른 location 으로 이동 합 니 다. 그러나 이러한 순환 은 최대 10 회 실 행 될 수 있 습 니 다. 후 nginx 를 초과 하면 500 오 류 를 되 돌려 줍 니 다.이 동시에 재 작성 모듈 은 set 명령 을 포함 하여 새로운 변 수 를 만 들 고 그 값 을 설정 합 니 다. 이것 은 일부 상황 에서 매우 유용 합 니 다. 예 를 들 어 조건 표 지 를 기록 하고 파 라 메 터 를 다른 location 에 전달 하 며 무엇 을 했 는 지 기록 하 는 등 입 니 다.

  • rewrite 모듈 명령 어
    1.rewrite
  • 문법
  • rewrite                [flag]; 키워드   uri 와 일치 하 는 정규   대체 내용         flag 태그
  • rewrite ^/(.*) http://www.adc.com/$1 permanent;
  • 설정 단계: server, location, if
  • regex 문법
  • 은 정상적으로 통용 되 는 정규 표현 식 으로 localtion 에 특수 한 의미 가 있 는 문법 과 달리 완전한 도 메 인 이름과 뒤의 경로 주소
  • 와 일치 합 니 다.
  • () 의 내용 은 & 1 (& 2, $3) 형식 으로 replacement 세그먼트 에 사용 할 수 있 습 니 다
  • .
  • replacement
  • replacement 이 http: / 로 시작 하면 요청 이 재 설정 되 고 불필요 한 rewrite 명령 을 실행 하지 않 습 니 다
  • flag 태그 설명
  • last \ # 이 규칙 이 완 료 된 후 replacement 의 값 에 따라 새로운 location URI 규칙 과 계속 아래로 일치 합 니 다. 이것 은 break 표시 와 다른 곳 break \ # 이 규칙 이 일치 하면 종료 되 며 뒤의 규칙 redirect \ # 302 임시 방향 으로 돌아 갑 니 다. 브 라 우 저 주 소 는 점프 후의 URL 주 소 를 표시 합 니 다.필드 를 http: / / 로 바 꾸 면 시작 합 니 다.permanent \ # 301 을 되 돌려 영구적 으로 방향 을 바 꾸 면 브 라 우 저 주소 표시 줄 에 점프 후의 URL 주소 가 표 시 됩 니 다.
    2.if
  • 문법:
  • if (condition) { … }
  • 기본 값: none
  • 설정 단계: server, location
  • if 와 () 및 내부 조건 간 에 빈 칸 을 추가 해 야 합 니 다. 붙 여 서 는 안 됩 니 다. 그렇지 않 으 면 컴 파일 이 통과 되 지 않 습 니 다
  • 판단 조건:
  • 1. 정규 표현 식 일치:
    =: 등가 비교;! =:기다 리 지 않 고 진짜 로 돌아 가기; ~:지정 한 정규 표현 식 모드 와 일치 할 때 "진짜" 로 돌아 가 일치 하 는 지 여 부 를 판단 할 때 문자 대소 문 자 를 구분 합 니 다. ~:지정 한 정규 표현 식 모드 와 일치 할 때 "진짜" 로 돌아 가 일치 하 는 지 여 부 를 판단 할 때 문자 대소 문 자 를 구분 하지 않 습 니 다.! ~:지정 한 정규 표현 식 모드 와 일치 하지 않 을 때 "진짜" 로 돌아 가 일치 하 는 지 여 부 를 판단 할 때 문자 대소 문 자 를 구분 합 니 다.! ~:지정 한 정규 표현 식 모드 와 일치 하지 않 을 때 '진짜' 로 돌아 가 일치 하 는 지 여 부 를 판단 할 때 문자 대소 문 자 를 구분 하지 않 습 니 다.
    2. 파일 및 디 렉 터 리 일치 판단:
    -f, !-f: 지정 한 경로 가 존재 하고 파일 인지 판단 합 니 다. -d, !-d: 지정 한 경로 가 존재 하고 디 렉 터 리 인지 판단 합 니 다. -e, !-e: 지정 한 경로 가 존재 하 는 지, 파일 이나 디 렉 터 리 가 모두 가능 한 지 판단 합 니 다. -x, !-x: 지정 한 경로 의 파일 이 존재 하고 실행 가능 한 지 판단 합 니 다.
  • if ( $http_x_forwarded_for !~* ^192\.168\.0\.1.* ) {
            ......
    }
    if ( $remote_addr = 222.222.222.222){
    .......
    }
    
    

    3.break
  • 이 명령 의 역할 은 현재 의 규칙 집합 을 완성 하고 다른 rewrite 명령
  • 을 처리 하지 않 는 것 이다.
  • 이 break 는 rewrite 에 있 는 flag 태그 의 break 와 아무런 관계 가 없다
  • 문법:
  • break;
  • 설정 단계: server, location, if
  •  location / {
    	rewrite ^/(.*) http://www.adc.com/$1 permanent;
    	break;
    }
    

    4.return
  • 처 리 를 중단 하고 클 라 이언 트 에 게 상태 코드 를 되 돌려 줍 니 다.표준 이 아 닌 444 상태 코드 는 연결 을 닫 고 응답 헤드 를 보 내지 않 습 니 다.사용 가능 한 상태 코드 는 204, 400, 402 - 406, 408, 410, 411, 413, 416 과 500 - 504 입 니 다.상태 코드 에 텍스트 단락 이 붙 어 있 으 면 이 텍스트 는 응답 주체 에 놓 여 있 습 니 다.반면 상태 코드 뒤에 URL 이 있 으 면 이 URL 은 location 헤더 가 됩 니 다.상태 코드 가 없 는 URL 은 302 상태 코드 로 간 주 됩 니 다.
  • 문법:
  • return code
  • 설정 단계: server, location, if
  • 예시
  • http: / / 시작 할 때 새 링크 로 완전히 바 뀌 었 습 니 다
  • flag 에 따 른 결과 에 대해 먼저 permanent 와 last 는 최종 적 으로 로 컬 8888 서비스 포트 로 이동 할 수 있 습 니 다. 그 다음 에 permanent 는 301 로 방향 을 바 꾸 는 뜻 이기 때문에 클 라 이언 트 는 uri 를 수정 할 것 입 니 다. last 는 새로운 uri 에 따라 server 를 다시 방문 하고 클 라 이언 트 를 통 해 방향 을 바 꾸 지 않 았 기 때문에 클 라 이언 트 의 url 주 소 는 바 뀌 지 않 습 니 다
  • server {
            listen       8861;
            server_name  abcd.com;
    
    		set $hello 'world';
    		
    		
            location / {
            
                #   url  http://www.baidu.com/...
                if ( $hello = "hello" ) {
    				rewrite ^/(.*)$ http://www.baidu.com/$1 break;
    		    }
    		    
    			 #   url abcd.com:8861/index/getInfo/
    		    if ( $hello = "world" ) {
    				rewrite ^/(.*)$ /index/getInfo/ permanent;
    		    }
    
    			# url   
    		    if ( $hello = "hello world" ) {
    				rewrite ^/(.*)$ /index/getInfo/ last;
    		    } 
    		   
            }
    		
    		location /index {
    			proxy_pass  http://localhost:8888;
    		}
        }
    

    보충 하 다
  • rewrite 모듈 이상 에 대해 사용 방식 만 소 개 했 을 뿐 일부 명령 라벨 의 의미 에 대해 본인 도 혼돈 이 있 고 상기 표현 에서 상세 하 게 설명 할 수 없다.모 르 겠 거나 실측 을 위주 로 대응 하 는 설정 을 선택 하 십시오.
  • rewrite 에 대한 로그 설정 이 nginx 로그 시스템 에 있 는 rewritelog 모듈 에 상세 한 설명 이 있 습 니 다.
  • 좋은 웹페이지 즐겨찾기