Nginx 서버에서 위치를 구성하는 방법

WBOY
풀어 주다: 2023-05-14 19:16:12
앞으로
3572명이 탐색했습니다.

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 { ... }
로그인 후 복사

[=|~|~*|^~|@]는 위치 수정자라고 하며, 이는 nginx가 후속 패턴과 일치하는 방법과 가장 기본적인 패턴 속성을 정의합니다. (단순 문자열 또는 정규식).

위치 수정자 정보

1. =

이것은 지정된 패턴과 완전히 일치하며 여기의 패턴은 간단한 문자열로 제한되므로 여기서는 정규식을 사용할 수 없습니다. 예:

server {
  server_name jb51.net;
  location = /abcd {
  […]
  }
}
로그인 후 복사

일치 상황:
http://jb51.net/abcd # 정확히 일치함

http://jb51.net/abcd # nginx 서버를 실행하는 시스템이 windows와 같이 대소문자를 구분하지 않는 경우,

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/ # 후행 슬래시 끝도 일치 범위 내에 있습니다

http://jb51.net/abcde # uri가 패턴



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

演示实例

Nginx 서버에서 위치를 구성하는 방법

产生的效果如下:
访问根目录/,匹配到location /
访问除hello.php之外的其它php程序,匹配到location ~ \.php$,并且用php5-fpm去运行
访问hello.php,匹配到location = /hello.php,访问被重定向到好联系官网

위 내용은 Nginx 서버에서 위치를 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿