Nginx 의 location 다양한 일치 규칙 및 우선 순위 설명
9496 단어 Nginx
저 는 T 형 소부 입 니 다. 평생 공부 하 는 인터넷 종사자 입 니 다.제 블 로 그 를 좋아 하 시 면 csdn 에서 저 를 주목 해 주 십시오. 문제 가 있 으 면 아래 댓 글 에서 교 류 를 환영 합 니 다. 감사합니다.
글 목록
기본 서식
우선 기본 설정 이 어떤 지 살 펴 보 겠 습 니 다.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
location 필드 는 server 필드 에 있 습 니 다. 이 server 에서 경로 역할 을 합 니 다. 문법 규칙 은 다음 과 같 습 니 다.
location [ = | ~ | ~* | ^~ ] url {
... }
location 키워드 뒤에 선택 할 수 있 는 수식 자 를 연결 하고 뒤에 일치 하 는 조건 을 연결 하 며 마지막 으로 큰 괄호 안에 실행 할 동작 을 넣 습 니 다.
하나의 server 필드 에 여러 개의 location 필드 가 있 을 수 있 습 니 다. 들 어 오 라 고 요청 하면 nginx 는 일정한 우선 순위 에 따라 이 location 을 일치 시 키 고 마지막 으로 가장 좋 은 동작 으로 실 행 됩 니 다.
동작 을 특별히 가리 키 지 않 으 면 요청 한 경 로 를 루트 설정 뒤에 추가 하고 해당 하 는 정적 자원 을 되 돌려 줍 니 다.
두 가지 일치 방식
위의 기본 문법 중의 url 은 두 가지 문법 이 있 는데 하 나 는 접두사 문자 (prefix string) 이 고 다른 하 나 는 정규 표현 식 (regular expression) 이다.
접두사 문자
요청 한 url 의 경로 부분, 즉 ip 과 포트 뒤에 시 작 된 부분 입 니 다. location 에서 정 의 된 접두사 로 시작 하면 일치 하 는 것 으로 생각 합 니 다.
url 구조 가 잘 모 르 는 친 구 는 나의 이 블 로그 의 'url 구성' 단락 을 참조 할 수 있다.
예 를 들 어 다음 설정 이 있 습 니 다.
location /some/path/ {
#...
}
그러면 요청 한 경로 가
/some/path/xiaofu.mp3
일 때 일치 합 니 다. 그러나 요청 한 경로 가 /some/other/path/xiaofu.mp3
이면 일치 하지 않 습 니 다.정규 표현 식
~
로 대소 문 자 를 구분 하 는 정규 표현 식 을 표시 하고 ~*
으로 대소 문 자 를 구분 하지 않 는 정규 표현 식 을 표시 합 니 다.아래 설정 은 요청 한 url 의 임의의 위치 포함
.html
또는 .htm
이 일치 하 는 것 을 표시 합 니 다.location ~ \.html? {
#...
}
일치 우선 순위
위 에는 모두 네 가지 수식 부호 가 있 는데, 우 리 는
~
와 ~*
가 정규 표현 식 에 쓰 이 는 것 이 고, 또 두 개 는 무엇 을 하 는 것 인지 알 게 되 었 다.이것 은 일치 하 는 우선 순위 와 관련된다.
=
는 정확 한 매 칭 을 나타 낸다. ^~
는 가장 좋 은 매 칭 을 나타 낸다. 둘 다 접두사 문자 매 칭 규칙 에 대응 하고 아래 의 매 칭 순 서 를 보면 둘 이 무엇 을 사용 하 는 지 알 수 있다.=
에 대응 하 는 정확 한 일치 만족 이 있다 면 요청 한 경로 와 일치 규칙 이 똑 같 으 면 정확 한 일치 행위 로 나머지 어떠한 일치 도 계속 하지 않 는 다 ^~
장식 문자 와 일치 하면 정규 일치 규칙 을 찾 지 않 고 가장 긴 접두사 에 맞 는 행동 이상 의 일치 순 서 를 바탕 으로 아래 의 실제 조작 제안 이 있 을 수 있 습 니 다.
=
로 정확하게 매 칭 하면 매 칭 시간 을 대량으로 절약 할 수 있다 이렇게 많아
설정 수정 은 다음 과 같 습 니 다.
location = / {
return 601;
}
location / {
return 602;
}
location /user/ {
return 603;
}
location ^~ /images/ {
return 604;
}
location ~* \.(gif|jpg|jpeg)$ {
return 605;
}
여기 서 나 는 실제 자원 반환 을 준비 하지 않 고 5 개의 서로 다른 반환 코드 로 일치 하 는 결 과 를 구분 했다.
문법 정확성 을 시험 해 보다.
(base) [root@ai-therm ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
그리고 설정 을 다시 불 러 옵 니 다.
(base) [root@ai-therm ~]# systemctl reload nginx
다른 기계 에서 curl 테스트 를 진행 하 다.
직접 방문
/
하면 정확 한 일치 로 더 이상 아래로 내 려 가지 않 고 601 로 돌아 갑 니 다.root@control-plane-1:~# curl -I 172.29.56.178/
HTTP/1.1 601
Server: nginx/1.16.1
Date: Sat, 30 May 2020 16:20:55 GMT
Content-Length: 0
Connection: keep-alive
접근
/user/xiaofu.mp3
하면 정규 일치 가 없 기 때문에 최 장 접두사 로 603 을 되 돌려 줍 니 다.root@control-plane-1:~# curl -I 172.29.56.178/user/xiaofu.mp3
HTTP/1.1 603
Server: nginx/1.16.1
Date: Sat, 30 May 2020 16:26:34 GMT
Content-Length: 0
Connection: keep-alive
방문
/user/xiaofu.jpg
하면 정규 일치 우선 순위 가 높 아 605 로 돌아 갑 니 다.root@control-plane-1:~# curl -I 172.29.56.178/user/xiaofu.jpg
HTTP/1.1 605
Server: nginx/1.16.1
Date: Sat, 30 May 2020 16:26:38 GMT
Content-Length: 0
Connection: keep-alive
접근
/images/xiaofu.jpg
하면 최 적 일치 로 정규 일치 규칙 을 무시 하고 604 로 돌아 갑 니 다.root@control-plane-1:~# curl -I 172.29.56.178/images/xiaofu.jpg
HTTP/1.1 604
Server: nginx/1.16.1
Date: Sat, 30 May 2020 16:29:06 GMT
Content-Length: 0
Connection: keep-alive
마지막 으로 방문
/test/xiaofu.html
하면 다른 일치 가 없어 서 /
일치 만 602 로 돌아 갈 수 있 습 니 다.root@control-plane-1:~# curl -I 172.29.56.178/test/xiaofu.html
HTTP/1.1 602
Server: nginx/1.16.1
Date: Sat, 30 May 2020 16:33:55 GMT
Content-Length: 0
Connection: keep-alive
url 끝 에 대한 /
/
는 아무런 영향 이 없습니다 http://1.2.3.4
와 http://1.2.3.4/
는 다 르 지 않 습 니 다. 브 라 우 저 는 기본적으로 이것 /
/
영향 이 비교적 크다.예 를 들 어 http://1.2.3.4/some/path/
는 /some/path/
디 렉 터 리 에서 기본 파일 을 찾 아 되 돌려 주 고 http://1.2.3.4/some/path
는 /some/
디 렉 터 리 에서 path
라 는 파일 을 되 돌려 주 며, 찾 지 못 하면 끝 에 /
를 더 해 방향 을 바 꾸 어 계속 찾 습 니 다 /some/path/
디 렉 터 리 에 있 는 기본 파일 =
를 사용 하여 되 돌아 오 는 속 도 를 가속 화 합 니 다 이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
linux2에 nginx 설치설치 가능한 nginx를 확인하고, 해당 nginx를 설치한다. localhost 혹은 해당 ip로 접속을 하면 nginx 화면을 볼 수 있다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.