未加星标

详解Nginx Location配置

字体大小 | |
[运维安全 所属分类 运维安全 | 发布者 店小二03 | 时间 | 作者 红领巾 ] 0人收藏点击收藏

今天有一位同学问到 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;
}
您可能感兴趣的文章:Nginx应用之Location路由反向代理及重写策略示例详解nginx配置location总结及rewrite规则写法nginx location匹配实例详解详解Nginx location 匹配规则详解nginx rewrite和根据url参数locationNginx服务器中location配置的一些基本要点解析Nginx服务器的location指令匹配规则详解Nginx服务器中的location配置详解简介Nginx中的location匹配规则Nginx Location 指令简明指南nginx location语法使用介绍Nginx配置指令location匹配符优先级和安全问题

本文运维安全相关术语:linux服务器代维 linux服务器搭建 运维管理 运维工程师 企业安全文章 企业安全管理 cf安全系统检测到游戏数据异常

主题: Nginx服务器
tags: location,Nginx,配置,匹配,Location,区块,com,domain,详解,留空,optional,var,modifier,nginx
分页:12
转载请注明
本文标题:详解Nginx Location配置
本站链接:https://www.codesec.net/view/577031.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 运维安全 | 评论(0) | 阅读(56)