Nginx的靜態處理能力很強,但是動態處理能力不足,因此,在企業中常用動靜分離技術。動靜分離技術其實是采用代理的方式,在server{}段中加入帶正則匹配的location來指定匹配項
針對PHP的動靜分離:靜態頁面交給Nginx處理,動態頁面交給PHP-FPM模塊或Apache處理。
在Nginx的配置中,是通過location配置段配合正則匹配實現靜態與動態頁面的不同處理方式
一、Nginx正則匹配
常用的正則匹配規則
^~ : 標識符后面跟一個字符串。Nginx將在這個字符串匹配后停止進行正則表達式的匹配,如 location ^~ /images/,它在匹配了/images/這個字符串后就停止搜索其它正則的location
= : 標識精確查找地址,如 location = / ,只會匹配uri為/的請求
~ : 區分大小寫的匹配
~* : 不區分大小寫的匹配
!~ : 對區分大小寫的匹配取非
!~* : 對不區分大小寫的匹配取非
經常會用到的正則表達式有
* ? + . () | ^ $
特殊字符說明{n} : 重復n次
{n,} : 重復n次或更多次
{n,m} : 重復n到m次
*? : 重復任意次,但盡可能少重復
+? : 重復1次或更多次,但盡可能少重復
?? : 重復0次或1次,但盡可能少重復
{n,m}? : 重復n到m次,但盡可能少重復
{n,}? : 重復n次以上,但盡可能少重復
二、配置實現Nginx動靜分離
1、需求分析:本案例根據企業需要,將配置Nginx實現動靜分離,對php頁面的請求轉發給LAMP處理,而靜態頁面交給Nginx,以實現動靜分離。客戶請求靜態數據給Nginx,Nginx直接應答客戶端,當請求動態數據到Nginx時,Nginx讓客戶端去找LAMP,通過代理的方式,LAMP就和客戶端連接了。
2、配置步驟:分別配置動態分離和靜態分離
(1)架設並調試后端LAMP架構,指定域名為www.bt.com,IP地址為192.168.10.23,創建動態頁面test.php。
(2)配置Nginx(192.168.10.22)處理動態頁面請求,並把域名改為www.test.com 在server{};段中加入以下代碼,檢測語法后,重啟Nginx
location ~ \.php$ { #匹配以.php為結尾的動態頁 proxy_pass http://LAMP的IP地址(192.168.10.23) : 80; #proxy_xy 意思是代理交給誰 }
(3)客戶端輸入http://192.168.10.22/test.php 成功后動態分離就實現了,接下來再配置靜態分離
(4)配置Nginx處理靜態頁面請求,在server{};中加入以下代碼,檢測語法后,重啟Nginx
location ~ .*\.(gif|jpg|jpeg|bmp|swf)$ { #這段代碼意思是任意網址以這5種格式為結尾就到Nginx根目錄下的html文件夾尋找資源
root html;
expires 1d; #緩存一天
}
(5)在nginx的html目錄中,放入圖片aa.jpg,然后在apache的動態測試頁test.php中添加
<html> <body> <img src="http://192.168.10.22/aa.jpg"> </body> </html>
(6)客戶端輸入http://192.168.10.22/test.php測試,由於test.php是動態頁面,因此客戶端會找到LAMP架構中的Apache,然后調取圖片aa.jpg是靜態數據,所以從Nginx提取,最后反饋給客戶端。