Nginx 의 location 명령 설정
nginx 설정 을 작성 하 는 데 있어 서 정확 한 location 명령 을 설정 하 는 것 이 상당히 중요 합 니 다.필 자 는 한 번 의 문제 조사 에서 이 명령 의 규칙 과 사용 방법 을 자세히 연 구 했 는데 여기 서 여러분 과 공유 하고 정확 하지 않 은 부분 이 있 으 면 지적 해 주 십시오.
명령 어 문법:
location [ 한정 부호 ] 규칙 uri { 명령 집합 }
요청 한 처리 프로 세 스에 서 nginx 는 location 검색 과정 을 시작 합 니 다. 이 과정 에서 nginx 는 일정한 규칙 에 따라 요청 한 request uri 로 정 의 된 규칙 uri 와 일치 하도록 선택 한 다음 에 응용 할 유일한 location 을 찾 고 이 location 정의 명령 을 집중 적 으로 적용 합 니 다.
이 과정 에서 가장 중요 한 것 은 location 의 검색 과정 이 어떻게 진행 되 는 지 입 니 다. 이 과정 을 이해 하려 면 먼저 규칙 uri 가 어떻게 정의 되 는 지 알 아야 합 니 다.
규칙 uri 는 세 가지 유형 으로 나 뉘 는데 nginx 는 이 몇 가지 유형 에 대한 일치 방법 이 다르다.
1. 한 정 된 문자 가 "=" 인 규칙 에 완전히 일치 합 니 다.
완전 일치 예: location = index.php {}, 그러면 요청 만 있 습 니 다:http://domain/index.php일치 할 수 있 습 니 다.http://domain/index.phpp혹시http://domain/iindex.php이것 은 모두 일치 할 수 없다.
2. 한정 문자 가 "^ ~" 이거 나 한정 문자 규칙 이 없 는 접두사 가 일치 합 니 다.
접두사 일치 예: location /abc {} 또는 location ^~ /abc {}, 그럼 요청:http://domain/abcd、http://domain/abc.php이런 것 은 모두 일치 할 수 있다.
3. 한 정 된 문자 가 '~' 또는 '~ *' 인 규칙 에 대해 정규 적 으로 일치 합 니 다.
정규 일치 예: location ~ \.php$ {}, 그럼 요청:http://domain/abc.php、http://domain/abcd.php이런 것 은 모두 일치 할 수 있다.
다음은 location 의 검색 과정 을 설명 합 니 다.
먼저 모든 "등호 규칙" 과 "접두사 규칙" 을 일치 하 는 선별 을 합 니 다. nginx 는 모든 접두사 일치 에서 "가장 긴" 일치 하 는 것 을 찾 은 다음 이 일치 하 는 location 를 기억 합 니 다. 그 다음 에 이 일치 하 는 규칙 에 따라 다음 행동 을 결정 합 니 다.
1. '등호 규칙' 이 일치 하면 nginx 는 검색 과정 을 즉시 끝 냅 니 다. 이 location 은 최종 결과 입 니 다.
2. 일치 하 는 규칙 이 한정 문자 "^ ~" 로 수식 되면 nginx 도 이 검색 과정 을 끝 냅 니 다. 이 location 이 최종 결과 입 니 다.
3. 일치 하거나 일치 하 는 항목 을 찾 지 못 하면 nginx 는 '정규 규칙' 에 들 어 갑 니 다.일치 하 는 선별 과정 입 니 다. 이 과정 에서 nginx 는 규칙 uri 가 설정 에서 정의 하 는 순서에 따라 일치 합 니 다. 그 중 하나 에 일치 하면 nginx 는 이 일치 하 는 과정 을 즉시 끝 냅 니 다. 이 location 도 최종 location 입 니 다. 정규 일치 하 는 것 을 찾 을 수 없 지만 이전 접두사 가 성공 하면 이전에 기억 한 접두사 일치 결 과 는 다음 과 같 습 니 다.최종 결과 가 될 겁 니 다.
위의 검색 과정 을 통 해 일치 하 는 location 을 성공 적 으로 찾 으 면 이 location 정 의 를 실행 하 는 명령 집중 명령 을 실행 합 니 다.
다음은 몇 가지 예 를 들 어 보 겠 습 니 다. 사용자 가 모두 방문 합 니 다.http://www.lnmp01v.com/abc
하나 "=" 명중, 정규 일치 건 너 뛰 기
server {
listen 80;
server_name www.lnmp01v.com;
location /abc {}
location = /abc {}
location ~ /abc {}
}
2. "^ ~" 명중, 건 너 뛰 기 정규 일치
server {
listen 80;
server_name www.lnmp01v.com;
location /ab {}
location ^~ /abc {}
location ~ /abc {}
}
3. "정규" 명중 1, 정규 일치 우선 접두사 일치
server {
listen 80;
server_name www.lnmp01v.com;
location /abc {}
location ~ /ab.* {}
}
넷, "정규" 명중 2, 정규 순서대로 일치
server {
listen 80;
server_name www.lnmp01v.com;
location /ab {}
location ~ /ab.* {}
location ~ /abc {}
}
5. "접두사" 명중, 정규 일치 하지 않 습 니 다. 전에 명중 한 접 두 사 를 사용 하여 일치 합 니 다.
server {
listen 80;
server_name www.lnmp01v.com;
location /abc {}
location ~ /ef.* {}
}
마지막 으로 전체 과정 을 설명 하기 위해 위조 코드 를 첨부 합 니 다.
location = findLocation();
if(null != location)
{
runLocationCmdSet();
}
function findLocation()
{
final_location = null;
prefix_location = null;
regex_location = null;
prefix_location = findByPrefix();
if(null != prefix_location)
{
if('=' == preceding(prefix_location))
{
return prefix_location;
}
if('^~' == preceding(prefix_location))
{
return prefix_location;
}
}
regex_location = findByRegex();
final_location = (null == regex_location) ? prefix_location : regex_location;
return final_location;
}
function findByPrefix()
{
result = null;
max_length = 0;
for(location in allPrefixLocation)
{
if(0 != (match_length = prefixMatch(location)))
{
if(match_length > max_length)
{
max_length = match_length;
result = location;
}
}
}
return result;
}
function findByRegex()
{
for(location in allRegexLocation)
{
if(regexMatch(location))
{
return location;
}
}
return null;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.