Syntax
location [=|~|~*|^~] /uri/ {...}
Rules
=: 정확한 uri 일치를 나타냅니다. (관심 있는 학생들은 url과 uri Difference를 살펴볼 수 있습니다)
~: 대소문자 구분 일반 일치를 나타냅니다.
~*: 대소문자를 구분하지 않는 일반 일치를 나타냅니다.
!~ && !~*: 대소문자 구분 비일치 일반 및 대소문자 구분 비일치 일반
/: 범용 일치, 임의 요청은
위치 일치 대상
에 일치됩니다. 위치 일치 테스트는 매개 변수 부분이 아닌 요청 uri 부분만 사용합니다. (이유: 매개변수 작성 방법이 너무 많아 정확하게 일치할 수 없음)
위치 일치 순서
여러 위치 구성을 전제로 위치 일치 순서(확인 안 됨, 헤헤, 구글에서 검색)
1. 먼저 일치 =
2. 두 번째로 일치^~
3. 다음으로 구성 파일의 순서에 따라 일반 일치를 수행합니다.
4. 마지막으로 일반 일치를 위해 전달합니다. 일치가 성공하면 즉시 일치를 중지하고 현재 일치 규칙을 따르세요.
Demo example
nginx 구성 파일은 아래에서 위로 세 가지 계층 구조로 나뉩니다.
| http 차단 http 프로토콜 수준 차단 | level v location block 요청된 uri
nginx는 허용합니다. 사용자는 위치 블록을 정의하고 특정 URI와 일치하는 일치 패턴을 지정합니다. 간단한 문자열(예: 파일 시스템 경로) 외에도 더 복잡한 일치 패턴도 허용됩니다.
location 블록의 기본 구문 형식은 다음과 같습니다.
location [=|~|~*|^~|@] pattern { ... }
위치 수정자 정보
1. =
이것은 지정된 패턴과 완전히 일치하며 여기의 패턴은 간단한 문자열로 제한되므로 여기서는 정규식을 사용할 수 없습니다. 예:
server { server_name jb51.net; location = /abcd { […] } }
http://jb51.net/abcd?param1?m2 # 쿼리 문자열 인수를 무시합니다. 여기 /abcd http://jb51.net/abcd/ 뒤에 ?param1?m2가 있습니다. # 일치하지 않습니다. 왜냐하면 끝에 슬래시가 있습니다. nginx는 이 상황을 완전한 일치로 간주하지 않습니다
http://jb51.net/abcde # 완전한 일치가 아니기 때문에 일치하지 않습니다
2.
위치 수정자를 작성할 필요가 없습니다. nginx는 여전히 패턴을 일치시킬 수 있습니다. 이 경우 지정된 패턴으로 시작하는 uri를 일치시키십시오. 여기서 uri는 일반 문자열만 가능하며 정규 표현식을 사용할 수 없습니다.
server {
server_name website.com;
location /abcd {
[…]
}
}
일치 상황: http://jb51.net/abcd # 정확히 일치함
http://jb51.net/abcd # nginx 서버를 실행하는 시스템이 windows와 같이 대소문자를 구분하지 않는 경우, 그런 다음
http://jb51.net/abcd?param1?m2와도 일치합니다. # 쿼리 문자열 인수를 무시합니다. 여기 /abcd 뒤에 ?param1?m2가 있습니다. http://jb51.net/abcd/ # 후행 슬래시 끝도 일치 범위 내에 있습니다
3으로 시작하므로 여전히 일치합니다. ~
이 위치 수정자는 대소문자를 구분하며 패턴은 정규식
example: server { server_name jb51.net; location ~ ^/abcd$ { […] } }
일치 상황: http://jb51.net/abcd # 정확히 일치
http://jb51.net/abcd # 일치하지 않음, ~는 대소문자를 구분합니다 http://jb51.net/ abcd?param1?m2 # 쿼리 문자열 인수를 무시합니다. 여기에는 /abcd http://jb51.net/abcd/ 뒤에 ?param1?m2가 있습니다. # 일치하지 않습니다. 끝에 슬래시가 있기 때문에 일치하지 않습니다. 정규식 일치^/abcd$
http://jb51.net/abcde Windows와 같은 민감한 시스템의 경우 ~ 및 ~*는 작동하지 않습니다. 이는 주로 운영 체제 때문입니다.
4. ~*
与 ~ 类似,但这个 location modifier 不区分大小写,pattern 须是正则表达式
example:
server { server_name website.com; location ~* ^/abcd$ { […] } }
匹配情况:
http://jb51.net/abcd # 完全匹配
http://jb51.net/abcd # 匹配,这就是它不区分大小写的特性
http://jb51.net/abcd?param1?m2 # 忽略查询串参数(query string arguments),这里就是 /abcd 后面的 ?param1?m2
http://jb51.net/abcd/ # 不匹配,因为末尾存在反斜杠(trailing slash),并不匹配正则表达式 ^/abcd$
http://jb51.net/abcde # 不匹配正则表达式 ^/abcd$
5. ^~
匹配情况类似 2. (none) 的情况,以指定匹配模式开头的 uri 被匹配,不同的是,一旦匹配成功,那么 nginx 就停止去寻找其他的 location 块进行匹配了(与 location 匹配顺序有关)
6. @
用于定义一个 location 块,且该块不能被外部 client 所访问,只能被 nginx 内部配置指令所访问,比如 try_files or error_page
演示实例
产生的效果如下:
访问根目录/,匹配到location /
访问除hello.php之外的其它php程序,匹配到location ~ \.php$,并且用php5-fpm去运行
访问hello.php,匹配到location = /hello.php,访问被重定向到好联系官网
위 내용은 Nginx 서버에서 위치를 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!