正则表达式!!!

  正则表达式(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