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 와 아무런 관계 가 없다
처 리 를 중단 하고 클 라 이언 트 에 게 상태 코드 를 되 돌려 줍 니 다.표준 이 아 닌 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 주 소 는 바 뀌 지 않 습 니 다