Nginx 의 location 일치
문법 규칙
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
문법 규칙 은 매우 간단 합 니 다. 하나의
location
키 워드 는 뒤에 선택 할 수 있 는 수정자 가 있 고 그 다음은 일치 하 는 문자 이 며 괄호 에서 실행 할 동작 입 니 다.수식 부호
=
는 정확 한 매 칭 을 나타 낸다.요청 한 url 경로 가 뒤의 문자열 과 완전히 같 을 때 만 명중 합 니 다.~
이 규칙 은 정규 정 의 를 사용 하여 대소 문 자 를 구분 하 는 것 임 을 나타 낸다.~*
은 이 규칙 이 정규 정 의 를 사용 하고 대소 문 자 를 구분 하지 않 는 다 는 것 을 나타 낸다.^~
이 기호 뒤의 문자 가 가장 잘 일치 하면 이 규칙 을 사용 하여 후속 검색 을 하지 않 겠 다 고 밝 혔 다.정합 과정
요청 한 url 직렬 화.예 를 들 어
%xx
등 문 자 를 디 코딩 하고 url 에 연 결 된 여러 개 /
를 제거 하 며 url 에 있 는 .
, ..
등 을 분석 합 니 다.이 단 계 는 일치 하 는 사전 작업 입 니 다.location 은 두 가지 표현 형식 이 있 는데 하 나 는 접두사 문 자 를 사용 하 는 것 이 고 하 나 는 정규 를 사용 하 는 것 이다.정규 라면 앞 에
~
또는 ~*
수정자 가 있다.구체 적 인 일치 과정 은 다음 과 같다.
우선 접두사 문 자 를 사용 하여 정 의 된 location 를 확인 하고 가장 긴 일치 하 는 항목 을 선택 하여 기록 합 니 다.
정확하게 일치 하 는 location 을 찾 았 다 면
=
수정자 의 location 을 사용 하여 검색 을 마치 고 설정 을 사용 하 는 것 입 니 다.그리고 정규 정 의 를 사용 하 는 location 을 순서대로 찾 습 니 다. 일치 하면 찾기 를 중단 하고 정 의 된 설정 을 사용 합 니 다.
일치 하 는 정규 location 이 없 으 면 앞 에 기 록 된 최 장 일치 접두사 문자 location 을 사용 합 니 다.
이상 의 일치 과정 을 바탕 으로 우 리 는 다음 과 같은 두 가지 시사 점 을 얻 을 수 있다.
/
하면 =
을 사용 하여 location 을 정의 할 수 있 습 니 다.예시
다음은 일치 하 는 과정 을 하나의 예 로 구체 적 으로 설명 하 겠 습 니 다.
다음 설정 파일 이 있다 면:
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /user/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
요청
/
A 와 정확하게 일치 하여 더 이상 찾 지 않 습 니 다.B 와 일치 하도록 요청
/index.html
합 니 다.먼저 일치 하 는 접두사 문 자 를 찾 습 니 다. 가장 긴 일치 하 는 것 은 설정 B 를 찾 은 다음 순서대로 일치 하 는 정규 를 찾 습 니 다.결 과 를 찾 지 못 했 습 니 다. 따라서 이전에 표 시 된 최 장 일치, 즉 설정 B 를 사용 합 니 다.C 와 일치 하도록 요청
/user/index.html
합 니 다.먼저 최 장 일치 C 를 찾 습 니 다. 뒤에 일치 하 는 정규 가 없 기 때문에 최 장 일치 C 를 사용 합 니 다.E 와 일치 하도록 요청
/user/1.jpg
합 니 다.먼저 접두사 문 자 를 찾 고 최 장 일치 하 는 항목 C 를 찾 으 며 정규 검색 을 계속 하여 일치 하 는 항목 E 를 찾 습 니 다.그래서 E 를 사용한다.D 와 일치 하도록 요청
/images/1.jpg
합 니 다.우선 접두사 문 자 를 찾 아 최 장 일치 D 를 찾 습 니 다.그러나 특이 한 것 은 ^~
수식 자 를 사용 하여 다음 정규 일치 검색 을 하지 않 기 때문에 D 를 사용 합 니 다.여기 앞 에 있 는 수정자 가 없 으 면 최종 매 칭 은 E 입 니 다.왜 그런 지 생각해 보 세 요.B 와 일치 하도록 요청
/documents/about.html
합 니 다.B 는 /
로 시작 하 는 모든 URL 이 일치 하 다 는 것 을 표시 하기 때문이다.위의 설정 에 서 는 B 만 만족 할 수 있 기 때문에 B 와 일치 합 니 다.location @ name 의 용법
@ 이름 location 을 정의 하 는 데 사용 합 니 다.내부 방향 을 바 꾸 는 데 주로 사용 되 며 정상 적 인 요청 을 처리 할 수 없습니다.그 용법 은 다음 과 같다.
location / {
try_files $uri $uri/ @custom
}
location @custom {
# ...do something
}
이전 예 에서 url 에 접근 하려 고 시도 할 때 해당 하 는 파일 을 찾 지 못 하면 사용자 정의 이름 location (여 기 는 custom) 으로 바 꿉 니 다.
주의해 야 할 것 은 이름 location 에 다른 이름 location 을 더 이상 끼 워 넣 을 수 없다 는 것 이다.
URL 끝의
/
필요 하 십 니까?URL 끝의
/
에 대해 서도 세 가지 설명 이 필요 합 니 다.첫 번 째 는 location 설정 과 관련 이 있 고 다른 두 가 지 는 무관 합 니 다./
는 영향 을 주지 않 습 니 다.즉 /user/
과 /user
는 같다.https://domain.com/
형식 이 라면 꼬리 부분 에 있 는 지 없 는 지 /
는 방향 을 바 꾸 지 않 습 니 다.브 라 우 저가 요청 을 할 때 기본적으로 추가 되 었 기 때문이다 /
.많은 브 라 우 저 들 이 주소 표시 줄 에 도 표시 되 지 않 지만 /
.이 점 은 baidu 를 방문 하여 검증 할 수 있 습 니 다.https://domain.com/some-dir/
이면.꼬리 부분 이 부족 하면 /
방향 을 바 꿀 수 있다.약정 에 따라 URL 끝의 /
는 디 렉 터 리 를 표시 하고 /
는 파일 을 표시 하지 않 기 때문이다.따라서 접근 /some-dir/
할 때 서버 는 자동 으로 이 디 렉 터 리 에서 해당 하 는 기본 파일 을 찾 습 니 다.접근 /some-dir
하면 서버 에서 먼저 some-dir
파일 을 찾 습 니 다. 찾 지 못 하면 some-dir
을 디 렉 터 리 로 삼 아 /some-dir/
로 바 꾸 고 이 디 렉 터 리 에서 기본 파일 을 찾 습 니 다.당신 의 사이트 가 이 렇 는 지 시험 해 볼 수 있 습 니 다.총결산
location 의 설정 은 두 가지 형식 으로 접두사 문자 와 정규 가 있 습 니 다.일치 하 는 것 을 찾 을 때 접두사 문 자 를 찾 고 가장 긴 일치 하 는 항목 을 선택 한 다음 정규 를 찾 습 니 다.정규 우선 순위 가 접두사 문자 보다 높 습 니 다.
정규 등 찾기 는 설정 파일 의 순서에 따라 진행 된다.따라서 정규 등의 순서 가 중요 하 므 로 정교 하 게 놓 을 수록 앞 에 놓 는 것 을 권장 한다.
사용
=
정확 한 일치 로 검색 순 서 를 빠르게 할 수 있 습 니 다. 루트 도 메 인 이름 이 자주 방문 된다 면 사용 하 는 것 을 권장 합 니 다 =
.다음으로 전송:https://juejin.im/post/5cbe89b6f265da0373718707
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.