>  기사  >  백엔드 개발  >  Nginx의 위치 구성 방법

Nginx의 위치 구성 방법

不言
不言원래의
2018-07-07 16:30:243826검색

이 글은 주로 Nginx의 Location 구성 방법을 소개합니다. 이제 모든 사람과 공유합니다. 필요한 친구들이 참고할 수 있습니다.

오늘 반 친구가 Nginx의 사이트 다중 경로 매칭 문제에 대해 물었습니다. 今天有一位同学问到 Nginx 的站点多路径匹配的问题?

1.www.domain.com/a 需要返回 /var/www/domain.com/a/index.html
2.www.domain.com/b 需要返回 /var/www/domain.com/b/index.html
如何配置 Nginx 使之生效?

解决这个问题,第一的反映是直接使用 Nginx 的 location 指令来解决,不过在给出答案之前,我们先来了解一下 Nginx location 指令的基础。

Nginx 区块配置概念

在 Nginx 的配置文件中,通常会用两个常用的区块(Block)来进行设置:

1.Server 区块
2.Localtion 区块

这里的区块是指 Block,你甚至可以理解为后面的那一对{}之间的配置内容。

Sever 区块主要是真的主机的配置,比如配置主机的域名,IP,端口等内容。当然,在一个 Nginx 的配置文件里面,我们是可以指定多个 Sever 区块的配置的。

而 Location 区块则是在 Sever 区块里面,细分到针对不同的路径和请求而进行的配置。因为一个站点中的 URI 通常会非常多,所以在 Location 区块设置这部分,你也是可以写多个 Location 的配置的。

下面来看看 Location 配置的基本语法先:

location optional_modifier location_match {
 # 这个 {} 里面的配置内容就是一个区块 Block
}

上面的 optional_modifier 配置项是可以使用正则表达式的。常用的几种如下:

  1. 留空。对,留空也是一种设置方式。在留空的情况下,配置表示请求路径由 location_match 开始。

  2. = ,等于号还是非常容易理解的:就是请求路径正好等于后面的 location_match 的值;跟第一项留空还是有区别的。

  3. ~,飘号(注意是英文输入的飘号)表示大小写敏感的正则匹配。

  4. ~*表示大小写不敏感的正则匹配。

  5. ^~ 表示这里不希望有正则匹配发生。

Nginx 处理 Location 区块的顺序

上面了解了 location 指令基本的概念和常用配置。我们再来看看 Location 生效的顺序!这个也很重要:

每一个请求进来 Nginx 之后,Nginx 就会选择一个 Location 的最佳匹配项进行响应,处理的具体流程是逐一跟 location 的配置进行比对,这个步骤可以分为以下几步:

  1. 先进行前缀式的匹配(也就是 location 的 optional_modifier 为空的配置)。

  2. Nginx 其次会根据 URI 寻找完全匹配的 location 配置(也就是 location 的 optional_modifier 为 = 的配置).

  3. 如果还是没有匹配到,那就先匹配 ^~ 配置,如果找到一个配置的话,则会停止寻找过程,直接返回响应内容。

  4. 如果还是没有找到匹配项的话,则会先进行大小写敏感的正则匹配,然后再是大小不写敏感的正则匹配。

Nginx Location 配置的一些例子:

多说无益,看了那么多理论,没有具体的例子支撑也是白搭,所以我们来看一下具体的配置例子:

location  = / {
  # = 等号配置符,只匹配 / 这个路由
}
location /data {
   # 留空配置,会匹配有 /data 开始的路由,后续有匹配会往下匹配。
}
location ^~ /img/ {
  # 注意 ^~ 配置,这里匹配到 /img/ 开始的话,直接就返回了。
}
location ~* .(png|gif|ico|jpg|jpeg)$ {
  # 匹配以 png, gif, ico, jpg or jpeg 结尾的请求;这个通常用来设置图片的请求响应。 
}

非常实用的两个例子:

1.简单的图片防盗链

location ~ .(png|gif|jpe?g)$ {
  valid_referers none blocked yourwebsite.com *.yourwebsite.com;
  # 注意上面写上你的域名就好  
  if ($invalid_referer) {
      return   403;
  }
}

2.针对一些可写入的路径,禁止 php 或者 js

1.www.domain.com/a/var/www/domain.com/a/index.html

2를 반환해야 합니다.www.domain.com/b는 /var/www/domain.com/b/index.html를 반환해야 합니다.

Nginx를 효과적으로 구성하려면 어떻게 해야 하나요?

이 문제를 해결하기 위한 첫 번째 반응은 Nginx 위치 지시문을 직접 사용하여 해결하는 것입니다. 그러나 답변을 제공하기 전에 먼저 Nginx 위치 지시문의 기본을 이해하겠습니다.

Nginx 블록 구성 개념

Nginx 구성 파일에서는 일반적으로 두 개의 일반적으로 사용되는 블록이 설정에 사용됩니다.

1.Server 블록2.Localtion 블록

여기서 Block은 Block을 의미하며 심지어 이해할 수도 있습니다. 다음 {} 쌍 사이의 구성 콘텐츠입니다. 위치 구성의 기본 구문을 먼저 살펴보겠습니다. 🎜
location ~* /(media|images|cache|tmp|logs)/.*.(php|jsp|pl|py|asp|cgi|sh)$ {
  return 403;
}
🎜위의 선택적 수정자 구성 항목은 정규식을 사용할 수 있습니다. 일반적으로 사용되는 것은 다음과 같습니다: 🎜
  1. 🎜비워두세요. 네, 공백으로 두는 것도 설정하는 방법입니다. 비워 두면 구성은 요청 경로가 location_match로 시작함을 나타냅니다. 🎜
  2. 🎜= , 등호는 이해하기 매우 쉽습니다. 요청 경로는 다음 location_match 값과 정확히 같습니다. 첫 번째 항목이 비어 있습니다. 여전히 차이가 있습니다. 🎜
  3. 🎜~, Piaohao(영어로 입력된 Piaohao임에 유의)는 대소문자를 구분하는 정규 매칭을 나타냅니다. 🎜
  4. 🎜~*는 대소문자를 구분하지 않는 일반 일치를 나타냅니다. 🎜
  5. 🎜^~는 여기서 정기적인 일치가 발생하지 않을 것으로 예상된다는 의미입니다. 🎜
🎜Nginx가 위치 블록을 처리하는 순서🎜🎜위에서는 위치 지시어의 기본 개념과 일반적인 구성에 대해 설명했습니다. 위치가 적용되는 순서를 살펴보겠습니다! 이는 또한 매우 중요합니다. 🎜🎜각 요청이 Nginx에 도달한 후 Nginx는 응답할 위치에 가장 적합한 것을 선택합니다. 처리의 구체적인 프로세스는 이를 위치 구성과 하나씩 비교하는 것입니다. :🎜
  1. 🎜먼저 접두사 유형 일치(즉, 위치의 option_modifier가 비어 있는 구성)를 수행합니다. 🎜
  2. 🎜Nginx는 URI를 기반으로 정확하게 일치하는 위치 구성을 찾습니다(즉, 위치의 option_modifier가 =인 구성).🎜
  3. 🎜그래도 일치하는 항목이 없으면 ^~ 구성을 먼저 일치시키세요. 구성이 발견되면 검색 프로세스가 중지되고 응답 내용이 직접 반환됩니다. 🎜
  4. 🎜일치하는 항목이 없으면 대소문자를 구분하는 일반 매칭을 먼저 수행한 다음 대소문자를 구분하지 않는 일반 매칭을 수행합니다. 🎜
🎜Nginx 위치 구성의 몇 가지 예: 🎜🎜너무 많은 이론을 읽은 후에는 이를 뒷받침하는 구체적인 예가 없으면 쓸모가 없으므로 구체적인 구성 예를 살펴보겠습니다. 🎜
location /a {
   root /var/www/domain.com/a;
}

location /b {
   root /var/www/domain.com/b;
}
rrreeerrreeerrreee🎜 두 가지 매우 실용적인 예:🎜🎜1. 간단한 이미지 핫링크 방지🎜rrreee🎜2 일부 쓰기 가능한 경로의 경우 php 또는 js 를 금지합니다. >의 단계가 실행됩니다🎜rrreee🎜질문에 대한 답변🎜🎜마지막으로 다음과 유사할 수 있는 질문에 대한 답변을 살펴보겠습니다.🎜rrreee🎜위 내용이 이 글의 전체 내용이기를 바랍니다. 모든 분들의 학습에 도움이 될 것입니다. 더 많은 관련 내용을 보시려면 PHP 중국어 홈페이지를 주목해주세요! 🎜🎜관련 권장 사항: 🎜🎜🎜nginx를 사용하여 하나의 서버에 여러 웹 서버 배포🎜🎜🎜🎜🎜Nginx에 모듈을 추가하는 방법🎜🎜🎜

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.