Nginx里的正则表达式

nginx.conf里面有几个大板块,第一部分是event,里面是设定最大并发数量。然后是各种协议,比如http\https\mail,一个http协议里面可以有多个server,每一个server对应的就是一个网站,在生产中,server 1和server 2乃至server n的内容是一样的,如果 server 1的服务器负载压力过大, nginx会启动负载均衡把用户都引向相对负载压力较小的服务器,这样可以达到保护服务器的目的。

而server下面可以有多个location,而location里就需要填写URI,那什么是URI呢?

URL:统一资源定位符

URI:同一资源标识符

举个例子:www.yahoo.com/nba/GoldenWarriors/players-curry.html,这一大串就是一个url,而uri指的是后面nba/GoldenWarriors/players-curry.html这一段。

location这个参数可以根据uri的不同需求进行配置,可以使用字符串和正则表达式匹配,使用字符串的话没啥说的,写啥就是对应啥;如果要使用正则表达式的话,语法是这样的:location [=|~|~*|^~] /uri/ {……},说一下中括号里各个东西的意思:

~:区分大小写;

~*:不区分大小写;

^~:禁止精确匹配;

=:精确匹配。下面举几个例子

1、location =/ {

里面就是各个的详细信息

}

这个使用了"=",所以采用的是精确匹配“/”,即只能访问nginx安装文件夹里的第一层所有文件,第二层的乃至更深的文件都无法访问。同理,当拒绝某ip访问的时候,也是仅仅拒绝这个ip地址访问“/”这个文件夹。

2、location /{

里面是各种配置信息

}

这里没有采用"=",也就是说只要是nginx安装文件夹下的所有文件,不管是第几层,只要在这个文件夹下都可以访问。

3、location ^~/images/{

里面是各种配置信息

}

首先这里先确定范围是nginx安装目录下的images文件下的所有子文件(包括其子文件夹),但是前面使用了^~,意思是禁止表达式匹配。

4、location ~* \.(gif|jpg|jpeg)${

里面是各种配置信息

}

不区分大小的匹配所有以.gif/.jpg/.jpeg结尾的文件夹,但是要注意,如果这个4号式子与上面那个3号式子一起写,无论是3上4下,还是4上3下,/images/下的文件会优先被3号式子选出。

比如,在nginx安装文件夹下有这样一个文件/images/1.gif。虽然它也是gif结尾,但是由于3式子先写,而且对文件夹的范围更精确,所以被3先挑出来,但是由于后面的^~,就脱离了正则的范围。不进入4的控制里。而如果有/AAA/1.jpg。这个文件就会被4挑选出来。

时间: 2024-08-10 15:10:49

Nginx里的正则表达式的相关文章

Nginx里的location以及如何用户认证

Nginx玩的就是"页面输出",把新闻的页面放到新闻的文件夹里,把体育的页面放到体育的文件夹里,把动漫的页面放到动漫的文件夹里,然后搭配好各种正则搜寻,这样用户在浏览器的地址栏里输入对应的地址,服务器就回到相应的文件夹里去把网页呈现出来. location的定位 服务器里的nginx.conf配置如图: 这个域名的server_name是localhost.location /里的/指的是 /usr/local/nginx/html 这个目录,此时,在/usr/local/nginx/

nginx中的正则表达式

1.if指令 所有的nginx内置变量都可以通过if指令和正则表达式来进行匹配,并且根据匹配结果进行一些操作,如下: if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /msie/$1 break; } if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) { set $id $1; } 使用符号~*和~模式匹配的正则表达式: ~为区分大小写的匹配. ~*不区分大小写的匹配(匹配firefox的正则同时匹配Fir

Tengine/nginx里的那些时间

老早用nginx时就零零散散的接触这些时间,一直没静下心系统的梳理一遍,其实理解了这些时间的作用和设置,对配置tengine(nginx)线上业务的优化是有不可小觑的的作用,对nginx的工作流程也会有更深的理解,目前我线上配置是服务http小文件(非视频和下载类)的,具体参数配置如下,因为没有看过nginx的源码,纯从运维角度理解: client_header_timeout 10s; client_body_timeout 10s; proxy_connect_timeout 10s; pr

Android里使用正则表达式

在Android里如何使用正则表达式: 以验证用户名为例,用户名一般字母开头,允许字母数字下划线,5-16个字节: String regEx = "^[a-zA-Z][a-zA-Z0-9_]{4,15}$"; Pattern pattern = Pattern.compile(regEx); Matcher matcher = pattern.matcher(userName); boolean b = matcher.matches(); 匹配的话b为true,否则为false.

nginx里proxy_pass有无/的区别

nginx在反向代理的时候,proxy_pass需要指定路径,有无"/"的区别,如下: location /lile { 配置一: proxy_pass http://192.168.0.37/; 配置二: proxy_pass http://192.168.0.37; } 环境说明: 反向代理服务器:192.168.0.224真实数据机器:192.168.0.37 1:先配置真实数据机的nginx配置文件 worker_processes 1; events { worker_con

Nginx里的proxy_pass

在这里我故意把nba的主页设置成新浪体育主页,把sports设置成新浪nba的主页,保存退出之后,检查配置文件并且重新启动nginx服务,把浏览器的缓存删除掉,试验一下localhost/nba的时候,果然出现的就是新浪体育的主页,有图有真相: 同理,输入localhost/sports的时候,输出的是新浪nba的界面,可见基本配置成功. 更进一步,我们把配置文件更改一下,改成这样 1.location /test/ {                proxy_pass http://lnsj

nginx不使用正则表达式匹配

^~   普通字符的匹配,查到之后立即停止查找其他location,不再进行正则表达式匹配,含有正则表达式的符号也将其作为普通字符匹配,优先级小于精确匹配大于正则匹配. server { listen       80; server_name  localhost; location  ^~ /images/ { root /usr/local/; index 1.jpg; } location  /images { root /usr/local/image/; index 1.gif; }

python里使用正则表达式的后向搜索肯定模式

在前面学习了比较多模式,有前向搜索的,也有后向搜索的,有肯定模式的,也有否定模式的.这次再来学习一个,就是后向搜索肯定模式,意思就是说已经扫描过了的字符串,还想后悔去看一下,是否可以匹配.它的语法是:(?<=pattern).比如下面的例子,就是用来识别Twitter的账号,但它这种模式只会匹配,不会出现在匹配的字符串中,如下: #python 3.6 #蔡军生 #http://blog.csdn.net/caimouse/article/details/51749579 # import re

ES6里关于正则表达式的拓展

一.构造函数 在 ES5 中,RegExp构造函数的参数有两种情况. 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag) var regex = new RegExp('xyz', 'i'); // 等价于 var regex = /xyz/i; 第二种情况是,参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝 var regex = new RegExp(/xyz/i); // 等价于 var regex = /xyz/i; 但是,ES5 不允许此时使用第二个参