Nginx 설정 명령 의 실행 순서 (11)
9399 단어 nginx
post-access
단계 다음 try-files
단계이 단 계 는 표준 설정 명령 을 실현 하 는 데 전문 적 으로 사용 된다. try_files 의 기능 은 Nginx 모듈 등록 처리 프로그램 을 지원 하지 않 습 니 다.... 때문에 try_files 명령 은 많은 FastCGI 에서 사용 되 는 설정 에 사용 되 기 때문에 간단하게 소개 하 는 것 도 좋 습 니 다.try_files 명령 은 두 개 이상 의 임의의 매개 변 수 를 받 아들 이 고 매개 변 수 는 하나의 URI 를 지정 합 니 다. 여기 서 설정 을 가정 합 니 다.
N
매개 변 수 는 Nginx 에 있 습 니 다. try-files
단계 N-1
파일 시스템 의 대상 (파일 이나 디 렉 터 리) 에 매개 변 수 를 매 핑 한 다음 이 대상 이 존재 하 는 지 확인 합 니 다.Nginx 에서 어떤 파일 시스템 대상 이 존재 하 는 것 을 발견 하면 try-files
단 계 는 현재 요청 한 URI 를 해당 대상 에 대응 하 는 인자 URI 로 변경 합 니 다 (단, 끝 에 있 는 슬 래 쉬 문 자 는 포함 되 지 않 으 며 '내부 점프' 는 발생 하지 않 습 니 다).하면, 만약, 만약... N-1
매개 변수 에 대응 하 는 파일 시스템 대상 이 존재 하지 않 습 니 다. try-files
단 계 는 바로 '내부 점프' 를 마지막 매개 변수 (즉, 제) 로 시작 합 니 다. N
매개 변수) 지정 한 URI.앞에서 (6) 화해시키다 (7) 정적 자원 서비스 모듈 이 현재 요청 한 URI 를 파일 시스템 에 비 추 는 것 을 보 았 습 니 다. root 명령 이 지정 한 '문서 루트 디 렉 터 리' 를 설정 하여 매 핑 합 니 다.예 를 들 어 '문서 루트 디 렉 터 리' 는
/var/www/
동안 URI 요청 /foo/bar
파일 로 비 춰 집 니 다. /var/www/foo/bar
, URI 요청 /foo/baz/
디 렉 터 리 로 매 핑 됩 니 다. /var/www/foo/baz/
. URI 끝의 슬 래 쉬 문 자 를 통 해 '디 렉 터 리' 와 '파일' 을 구분 하 는 방법 에 주의 하 십시오.우 리 는 지금 토론 하고 있다. try_files 설정 명령 은 같은 규칙 을 사용 하여 각 매개 변수 URI 가 파일 시스템 대상 에 대한 매 핑 을 완성 합 니 다.아래 의 이 예 를 살 펴 보 자.
root /var/www/;
location /test {
try_files /foo /bar/ /baz;
echo "uri: $uri";
}
location /foo {
echo foo;
}
location /bar/ {
echo bar;
}
location /baz {
echo baz;
}
여기 통과. root 명령 은 '문서 루트 디 렉 터 리' 를 하면, 만약, 만약...
/var/www/
경로 아래 에 중요 한 데 이 터 를 저장 하면 다른 임의의 경로 로 바 꿀 수 있 지만, 이 경 로 는 Nginx worker 프로 세 스 를 실행 하 는 시스템 계 정 에 최소한 읽 을 수 있 는 권한 이 있 습 니 다.우 리 는 /var/www/
사용중 try_files 명령 을 설정 하고 세 개의 인 자 를 제공 합 니 다. location /test
, /foo
화해시키다 /bar/
. 앞의 쌍 에 따라 try_files 지령 의 소 개 는 우리 가 알 수 있 듯 이, 그것 은 /baz
단계 순서대로 앞의 두 매개 변 수 를 검사 합 니 다. try-files
화해시키다 /foo
대응 하 는 파일 시스템 대상 이 존재 하 는 지 여부 입 니 다.먼저 실험 조 를 만들어 도 무방 하 다.지금
/bar/
경로 아래 가 비어 있 으 면 첫 번 째 매개 변수 입 니 다. /var/www/
매 핑 된 파일 /foo
존재 하지 않 는 다.마찬가지 로 두 번 째 매개 변수 에 대해 /var/www/foo
매 핑 된 디 렉 터 리 /bar/
없 는 거 야.그래서 지금 Nginx 가 있 습 니 다. /var/www/bar/
마지막 인자 가 지정 한 URI (즉, try-files
의 '내부 점프'.실제 요청 결 과 는 이 점 을 입증 했다. $ curl localhost:8080/test
baz
분명히 이 요 구 는 최종 적 으로
/baz
연결 되 어 출력 을 실 행 했 습 니 다. location /baz
문자열 작업.상례 에서 정의 한 baz
화해시키다 location /foo
이곳 의 운행 과정 에 전혀 참여 하지 않 을 것 입 니 다. 왜냐하면 try_files 이전 location /bar/
개 인자, Nginx 는 파일 시스템 만 검사 하고 URI 와 N-1
사이 의 일치.위의 요청 에 대해 Nginx 는 다음 과 같은 '디 버 깅 로그' 를 생 성 합 니 다.
$ grep trying logs/error.log
[debug] 3869#0: *1 trying to use file: "/foo" "/var/www/foo"
[debug] 3869#0: *1 trying to use dir: "/bar" "/var/www/bar"
[debug] 3869#0: *1 trying to use file: "/baz" "/var/www/baz"
이 정 보 를 통 해 똑똑히 볼 수 있다.
location
단계 에서 일어 난 일: Nginx 가 파일 을 차례로 검 사 했 습 니 다. try-files
디 렉 터 리 /var/www/foo
와 마지막 매개 변 수 를 처리 하 였 습 니 다. /var/www/bar
. 여기 서 마지막 '디 버 깅 정보' 는 오해 하기 쉬 우 며 Nginx 도 마지막 인 자 를 /baz
매 핑 을 파일 시스템 대상 으로 검사 한 것 은 사실 이 아 닙 니 다.... 해 야 한다 try_files 명령 이 마지막 매개 변 수 를 처리 할 때 '내부 점프' 를 직접 실행 합 니 다. 해당 하 는 파일 시스템 대상 이 존재 하 든 안 하 든 간 에.다음 에 실험 을 하나 더 하 겠 습 니 다.
/baz
다음 이름 만 들 기 /var/www/
파일 foo
(주의 할 필요 가 있 습 니 다 hello world
디 렉 터 리 에 쓰기 권한): $ echo 'hello world' > /var/www/foo
그리고 부탁 해.
/var/www/
인터페이스: $ curl localhost:8080/test
uri: /foo
여기 서 무슨 일이 일 어 났 습 니까?우리 가 보기에 try_files 명령 의 첫 번 째 매개 변수
/test
파일 로 매 핑 가능 /foo
, Nginx 는 /var/www/foo
단계 에서 이 파일 이 확실히 존재 한 다 는 것 을 알 게 되 었 습 니 다. 그래서 현재 요청 한 URI 를 이 인자 의 값 으로 바 꿉 니 다. 즉, try-files
그리고 뒤의 인 자 를 계속 검사 하지 않 고 뒤의 요청 처리 단 계 를 직접 실행 합 니 다.위 에서 이 부탁 은
/foo
단계 에서 발생 하 는 "디 버 깅 로그" 는 다음 과 같 습 니 다. $ grep trying logs/error.log
[debug] 4132#0: *1 trying to use file: "/foo" "/var/www/foo"
분명히
try-files
단계, Nginx 는 확실히 검사 와 처리 만 했 습 니 다. try-files
이 매개 변 수 는 뒤의 매개 변 수 는 모두 단락 되 었 다.유사 하 게 우리 가 방금 만 든 것 을 삭제 했다 고 가정 합 니 다.
/foo
서류 /var/www/foo
다음 이름 만 들 기 /var/www/
하위 디 렉 터 리: $ mkdir /var/www/bar
요구 하 다
bar
결과 도 비슷 하 다. $ curl localhost:8080/test
uri: /bar
이런 상황 에서 Nginx 는
/test
단계 첫 번 째 인자 발견 try-files
대응 하 는 파일 이 존재 하지 않 으 면 두 번 째 매개 변수 에 대응 하 는 파일 시스템 대상 을 검사 합 니 다. (여기 가 디 렉 터 리 입 니 다. /foo
)。이 디 렉 터 리 가 존재 하기 때문에 Nginx 는 현재 요청 한 URI 를 두 번 째 인자 의 값 으로 바 꿉 니 다. 즉, /var/www/bar/
(주의, 원시 매개 변수 값 은? /bar
, 하지만 try_files 끝 에 있 는 슬 래 쉬 문 자 를 자동 으로 제거 합 니 다.이 실험 에서 발생 한 "디 버 깅 로그" 는 다음 과 같다.
$ grep trying logs/error.log
[debug] 4223#0: *1 trying to use file: "/foo" "/var/www/foo"
[debug] 4223#0: *1 trying to use dir: "/bar" "/var/www/bar"
우 리 는 보 았 다. try_files 명령 은 여기에서 두 개의 인자 만 검사 하고 처리 했다.
앞의 이 몇 조 의 실험 을 통 해 보기 어렵 지 않다. try_files 명령 은 본질 적 으로 현재 요청 한 URI 를 조건 부 로 바 꿀 뿐 이 며, 여기 서 말 하 는 '조건' 은 파일 시스템 의 대상 이 존재 하 는 지 여부 입 니 다.'조건' 이 모두 만족 하지 않 을 때, 그것 은 무조건 지 정 된 '내부 점프' 를 시작 할 것 이다.물론 무조건 '내부 도약' 을 시작 하 는 것 외 에 try_files 명령 은 다음 과 같이 지 정 된 상태 코드 의 HTTP 오류 페이지 를 직접 되 돌려 줍 니 다.
try_files /foo /bar/ =404;
이 줄 설정 은
/bar/
화해시키다 /foo
매개 변수 에 대응 하 는 파일 시스템 대상 이 존재 하지 않 을 때 바로 되 돌려 줍 니 다. /bar/
오류 페이지.HTTP 상태 코드 를 표시 하기 위해 등호 문자 접 두 사 를 어떻게 사용 하 는 지 주의 하 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.