正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。许多程序设计语言都支持利用正则表达式进行字符串操作,perl内建了一个功能强大的正则表达式引擎pcre,正则表达式这个概念最初由UNIX中的工具软件sed grep等普及开来。
其中正则表达式中“”表示转义,这是个坑,正则表达式好早之前就接触过了,但由于其过于抽象,所以一直没往脑子里记,然后就被坑了。。。在nginx的配置文件里有:
1 server{
2
3 listen 8054;
4 root /home/users********;
5 access_log /home/users/***/var/logs/nginx/faren.log main;
6 error_log /home/users/***/var/logs/nginx/faren_error.log;
7 index index.php;
8
9 location / {
10 include fastcgi_params;
11 fastcgi_param SCRIPT_FILENAME $document_root/matrix/index.php;
12 fastcgi_param REQUEST_URI /matrix/faren$fastcgi_script_name;
13 fastcgi_pass 127.0.0.1:10053;
14 fastcgi_connect_timeout 5s;
15 fastcgi_read_timeout 5s;
16 fastcgi_send_timeout 5s;
17 }
18
19 location ~ .(js|css|jpg|jpeg|png|gif|ico)$ {
20 root /home/users/*********;
21 }
22 }
在上面第19行的配置里包含了regular expression。这里再写一下关于nginx的配置中location的的资源标识语法:
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。
这里的location可以用文字字符串或者正则表达式,正好上面例子包含了两个,下面细说一下nginx当收到了一个http请求,他的处理流程:
解析收到的http请求------->>>>
查找配置文件的http层级里面的server层级,找到适配的域名(因为有可能有多个虚拟主机)—————>>>>
进入server层级根据请求的url,找到适配的uri————>>>>
根据具体情况如果是静态则nginx自己处理,如果是.php的则给fastcgi。
其中在寻找适配的uri时,遵循如下规则:
首先搜寻配置文件里的文字字符串表示的uri 有匹配的存着,然后搜寻正则表达式表示的uri,如果命中则按着这个uri,如果无命中则找文字字符匹配的结果。
用文字字符串和正则表达式表示uri的语法详见:http://wiki.nginx.org/HttpCoreModule#location