资讯专栏INFORMATION COLUMN

Nginx Location 配置

goji / 2766人阅读

摘要:而区块则是在区块里面,细分到针对不同的路径和请求而进行的配置。在留空的情况下,配置表示请求路径由开始。表示大小写不敏感的正则匹配。注意配置,这里匹配到开始的话,直接就返回了。匹配以结尾的请求这个通常用来设置图片的请求响应。

原文来自:https://www.codecasts.com/blo...

今天有一位同学问到 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 配置项是可以使用正则表达式的。常用的几种如下:

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

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

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

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

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

Nginx 处理 Location 区块的顺序

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

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

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

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

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

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

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 的脚步执行

location ~* /(media|images|cache|tmp|logs)/.*.(php|jsp|pl|py|asp|cgi|sh)$ {
  return 403;
}
问题的答案

最后,我们再看问题的答案,可以是类似这个样子的:

location /a {
   root /var/www/domain.com/a;
}

location /b {
   root /var/www/domain.com/b;
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39918.html

相关文章

  • nginx 基本入门

    摘要:是至今为止见过最好的入门文章。采取基于事件的模型和依赖的机制,在多个子进程之间高效的分配请求。默认情况下,这个配置文件通常命名为并且会放置在,,或者。 本文属于翻译文章,原文链接为 nginx Beginner’s Guide。是至今为止见过最好的 nginx 入门文章。额。。。没有之一。 这篇教程简单介绍了 nginx 并且讲解了一些 nginx 可以解决的简单任务。这里,我们假设 ...

    huayeluoliuhen 评论0 收藏0
  • nginx文档翻译系列]新手指南

    摘要:主进程的目的是为了读取和评估配置并保持工作进程。默认情况下,这个配置文件名为。如果一个块指令在大括号中有其他的指令,则称之为上下文如和。放在配置文件最外面的指令的称之为主文,指令在主文中在中,在中。注意指令已经被放置在环境中。 原文链接:http://nginx.org/en/docs/begi...转自我的github有些地方觉得翻译的不是很合理,所以在括号中写出了原句。如果有地方翻...

    jk_v1 评论0 收藏0
  • nginx文档翻译系列]新手指南

    摘要:主进程的目的是为了读取和评估配置并保持工作进程。默认情况下,这个配置文件名为。如果一个块指令在大括号中有其他的指令,则称之为上下文如和。放在配置文件最外面的指令的称之为主文,指令在主文中在中,在中。注意指令已经被放置在环境中。 原文链接:http://nginx.org/en/docs/begi...转自我的github有些地方觉得翻译的不是很合理,所以在括号中写出了原句。如果有地方翻...

    phoenixsky 评论0 收藏0
  • 翻译:nginx入门指引(一)

    摘要:入门指引启动,停止和重载配置配置文件的结构服务静态内容建立简单的代理服务器建立代理这个指引对做了一些简单的介绍并且描述了一些它可以完成的简单任务。如果一个块级指令中包含了其它指令,那么它被称为一个上下文。为了使配置生效,要发送信号。 兴趣使然的翻译,业余水平,nginx官方英文介绍文档很不错,可惜中文网上好像没有相应的翻译。 入门指引 启动,停止和重载配置配置文件的结构服务静态内容...

    kaka 评论0 收藏0
  • Nginx Beginner's Guide

    摘要:主进程的主要目的就是读取和评估配置,并且维护工作进程。工作进程实际上是处理请求。下一步,使用上一小节的服务器配置块并将其修改为代理服务器配置。符合响应的请求将会映射到文件夹。为了使新的配置文件生效,发送信号给 概述   译文。参考官方文档  这篇指南描述了如何启动、停止nginx,重新加载配置,并且解释了配置文件的结构,描述了如何设置nginx去服务静态内容,如何配置nginx作为代理...

    yeyan1996 评论0 收藏0

发表评论

0条评论

goji

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<