Nginx 설정 명령 의 실행 순서 (8)
10655 단어 nginx
rewrite
、 access
화해시키다 content
이 세 가지 가장 흔히 볼 수 있 는 Nginx 요청 처리 단계 입 니 다. 이 과정 에서 이 세 단계 에서 실행 되 는 많은 Nginx 모듈 과 그 설정 명령 도 소개 합 니 다.또한 요청 처리 단계 의 구분 은 설정 명령 의 집행 순서 에 직접적인 영향 을 미 친 다 는 것 을 알 수 있다. 이러한 단 계 를 숙지 하 는 것 은 서로 다른 Nginx 모듈 을 정확하게 설정 하고 서로 간 의 협동 작업 을 실현 하 는 데 매우 필요 하 다.그래서 우 리 는 이어서 남 은 단계 들 을 토론 할 것 이다.앞에서 (1) Nginx 가 요청 을 처리 하 는 과정 은 모두 11 단계 로 나 뉘 는데, 실행 순서에 따라 다음 과 같다.
post-read
、 server-rewrite
、 find-config
、 rewrite
、 post-rewrite
、 preaccess
、 access
、 post-access
、 try-files
、 content
그리고 log
. 가장 먼저 실 행 했 어
post-read
단 계 는 Nginx 에서 요청 헤더 (request headers) 를 읽 고 해석 한 후 바로 실 행 됩 니 다.이 단 계 는 앞에서 소개 한 것 처럼. rewrite
단계 적 으로 Nginx 모듈 등록 처리 프로그램 을 지원 합 니 다.예 를 들 어 표준 모듈 ngx_realip 바로 post-read
단계 에서 처리 프로그램 을 등 록 했 습 니 다. Nginx 는 현재 요청 한 원본 주소 가 지정 한 요청 헤더 의 값 이 라 고 생각 하도록 하 는 기능 입 니 다.아래 의 이 예 를 사용 하 겠 습 니 다. ngx_realip 모듈 은 제공 했다 set_real_ip_from 화해시키다 real_ip_header 이 두 설정 명령: server {
listen 8080;
set_real_ip_from 127.0.0.1;
real_ip_header X-My-IP;
location /test {
set $addr $remote_addr;
echo "from: $addr";
}
}
여기 설정 은 Nginx 가 그 걸
127.0.0.1
모든 요청 의 원본 주 소 를 요청 헤더 로 변경 합 니 다. X-My-IP
지정 한 값 입 니 다.동시에 이 예 는 표준 내장 변 수 를 사용 했다. $remote_addr 현재 요청 한 원본 주 소 를 출력 하여 변경 되 었 는 지 확인 합 니 다.우선 이 걸 로 컬 에서 요청 해 볼 게 요.
/test
인터페이스: $ curl -H 'X-My-IP: 1.2.3.4' localhost:8080/test
from: 1.2.3.4
여기 curl 도 구 를 사 용 했 어 요.
-H
옵션 을 선택 하면 추가 HTTP 요청 헤더 가 지 정 됩 니 다. X-My-IP: 1.2.3.4
. 출력 에서 볼 수 있 습 니 다. $remote_addr 변수의 값 이 확실히 있 습 니 다. rewrite
단계 가 됐어 요. X-My-IP
요청 헤더 에서 지정 한 값, 즉 1.2.3.4
. 그렇다면 Nginx 는 현재 요청 한 원본 주 소 를 언제 바 꿨 을 까?정 답 은 post-read
단계... 때문에 rewrite
단계 적 운행 post-read
단계 location
설정 블록 중 통과 set 설정 명령 읽 기 $remote_addr 내 장 된 변 수 를 읽 을 때 원본 주 소 는 이미 지 났 습 니 다. post-read
단계 변경.하면, 만약, 만약...
/test
인터페이스 가 지정 되 지 않 았 습 니 다. X-My-IP
요청 헤더 또는 제공 X-My-IP
요청 헤더 의 값 이 합 법 적 인 IP 주소 가 아니라면 Nginx 는 원본 주 소 를 바 꾸 지 않 습 니 다. 예 를 들 어: $ curl localhost:8080/test
from: 127.0.0.1
$ curl -H 'X-My-IP: abc' localhost:8080/test
from: 127.0.0.1
하면, 만약, 만약...
/test
인터페이스 X-My-IP
요청 헤더, Nginx 가 원본 주 소 를 바 꾸 는 것 을 실행 하지 않 습 니 다.이것 은 상례 가 이미 사용 되 었 기 때문이다. set_real_ip_from 명령 은 원본 주소 의 변경 작업 을 규정 하고 있 습 니 다 127.0.0.1
. 라 는 요청 이 발효 됐다.이런 여과 메커니즘 은 다른 신뢰 할 수 없 는 주소 에서 온 악의 적 인 사 기 를 피 할 수 있다.물론 통과 할 수도 있다 set_real_ip_from 명령 어 IP 네트워크 지정 (이용) (3) 중 에 소 개 된 'CIDR 기법').이 밖 에 여러 개 set_real_ip_from 를 동시에 설정 합 니 다. 문장 도 허용 합 니 다. 이렇게 하면 여러 개의 신뢰 받 는 원본 주소 나 주소 단 을 지정 할 수 있 습 니 다.다음은 하나의 예 이다. set_real_ip_from 10.32.10.5;
set_real_ip_from 127.0.0.0/24;
어떤 독자 들 은 물 어 볼 수도 있다. ngx_realip 모듈 은 도대체 어떤 실제 용도 가 있 습 니까?왜 우 리 는 요청 의 출처 주 소 를 고 쳐 써 야 합 니까?정 답 은 Nginx 가 처리 한 요청 이 한 HTTP 프 록 시 서버 의 리 트 윗 을 거 쳤 을 때 이 모듈 은 특히 유용 해 졌 다 는 것 이다.원본 사용자 가 전송 을 요청 한 후에 Nginx 가 받 은 요청 의 원본 주 소 는 예외 없 이 이 프 록 시 서버 의 IP 주소 로 바 뀌 었 기 때문에 Nginx 와 Nginx 뒤의 응용 프로그램 은 원본 요청 의 실제 출처 를 알 수 없습니다.따라서 일반적으로 우 리 는 Nginx 이전의 프 록 시 서버 에서 요청 한 원본 주 소 를 특수 한 HTTP 요청 헤더 에 인 코딩 합 니 다 (예 를 들 어 상례 의 경우).
X-My-IP
요청 헤더) 그리고 이 요청 헤더 에 인 코딩 된 주 소 를 Nginx 쪽 에서 복원 합 니 다.이렇게 하면 Nginx 의 후속 처리 단계 (Nginx 뒤의 각종 백 엔 드 응용 포함) 는 이러한 요청 이 원래 의 주소 에서 직접 왔 다 고 생각 하고 프 록 시 서버 는 존재 하지 않 는 것 과 같다.바로 이 수요 때문에 ngx_realip 모듈 은 첫 번 째 처리 단계, 즉 post-read
가능 한 한 빨리 요청 의 출처 를 고 칠 수 있 도록 단계, 등록 처리 프로그램.post-read
단계 server-rewrite
단계우리 (2) 맞다 ngx_rewrite 모듈 의 설정 명령 을 직접 작성 합 니 다. server
블록 을 설정 할 때 기본적으로 실 행 됩 니 다. server-rewrite
단계다음은 이러한 예 를 살 펴 보 겠 습 니 다. server {
listen 8080;
location /test {
set $b "$a, world";
echo $b;
}
set $a hello;
}
여기
set $a hello
바로 적 혀 있어 요. server
설정 블록 에서 실 행 됩 니 다. server-rewrite
단계그리고 server-rewrite
보다 빠르다 rewrite
단계 실행 location
블록 에 있 는 문 구 를 설정 합 니 다. set $b "$a, world"
바깥 것 보다 늦다 set $a hello
문장 운행.이 사례 의 테스트 결 과 는 이 점 을 증명 했다. $ curl localhost:8080/test
hello, world
... 때문에
server-rewrite
에 자리잡다,... post-read
단계 이후 server
설정 블록의 set 명령 도 항상 실행 ngx_realip 모듈 에서 요청 한 원본 주 소 를 바 꾼 후.아래 의 이 예 를 보십시오. server {
listen 8080;
set $addr $remote_addr;
set_real_ip_from 127.0.0.1;
real_ip_header X-Real-IP;
location /test {
echo "from: $addr";
}
}
청구 하 다.
/test
인터페이스의 결 과 는 다음 과 같다. $ curl -H 'X-Real-IP: 1.2.3.4' localhost:8080/test
from: 1.2.3.4
비록 set 지령 이 적 혀 있다 ngx_realip 설정 명령 전 까지 만 해도 늦 었 습 니 다. ngx_realip 모듈 실행.그래서
$addr
변수 server-rewrite
단계 이불 set 명령 할당 시 $remote_addr 변수 가 읽 은 원본 주 소 는 이미 고 쳐 쓴 것 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.