正則表達式(Regular Expression)使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些符合某個模式的文本。許多程序設計語言都支持利用正則表達式進行字符串操做,perl內建了一個功能強大的正則表達式引擎pcre,正則表達式這個概念最初由UNIX中的工具軟件sed grep等普及開來。php
其中正則表達式中「\」表示轉義,這是個坑,正則表達式好早以前就接觸過了,但因爲其過於抽象,因此一直沒往腦子裏記,而後就被坑了。。。在nginx的配置文件裏有:css
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的的資源標識語法:java
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。nginx
這裏的location能夠用文字字符串或者正則表達式,正好上面例子包含了兩個,下面細說一下nginx當收到了一個http請求,他的處理流程:正則表達式
解析收到的http請求------->>>>express
查找配置文件的http層級裏面的server層級,找到適配的域名(由於有可能有多個虛擬主機)—————>>>>編輯器
進入server層級根據請求的url,找到適配的uri————>>>>ide
根據具體狀況若是是靜態則nginx本身處理,若是是.php的則給fastcgi。工具
其中在尋找適配的uri時,遵循以下規則:url
首先搜尋配置文件裏的文字字符串表示的uri 有匹配的存着,而後搜尋正則表達式表示的uri,若是命中則按着這個uri,若是無命中則找文字字符匹配的結果。
用文字字符串和正則表達式表示uri的語法詳見:http://wiki.nginx.org/HttpCoreModule#location