时间:2021-05-19
今天有一位同学问到 Nginx 的站点多路径匹配的问题?
1./a 需要返回 /var/www/domain.com/a/index.html
2./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 配置项是可以使用正则表达式的。常用的几种如下:
Nginx 处理 Location 区块的顺序
上面了解了 location 指令基本的概念和常用配置。我们再来看看 Location 生效的顺序!这个也很重要:
每一个请求进来 Nginx 之后,Nginx 就会选择一个 Location 的最佳匹配项进行响应,处理的具体流程是逐一跟 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;}声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、Nginx反向代理配置:1、虚拟主机配置复制代码代码如下:location/{try_files$uri@apache;}location@apache{i
Nginx中的Location指令是NginxHttpCoreModule中重要指令。Location指令比较简单,但却是配置Nginx过程中不得不去了解的。L
修改/usr/local/nginx/conf/nginx.conf这个配置文件。找到location~.*\.(gif|jpg|jpeg|png|bmp|sw
Nginx是当前主流的Web服务。以下是一些最常见的错误配置。Missingrootlocationserver{root/etc/nginx;location
nginxlocation匹配实例详解例1、nginx配置:例2、nginx配置:例3、nginx配置:感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!