Apache與Nginx動靜分離
概述
Nginx的靜態處理能力很強,但是動態處理能力不足,因此,在企業中常用動靜分離技術。動靜分離技術其實是采用代理的方式,在server{}段中加入帶正則匹配的location來指定匹配項
針對PHP的動靜分離:靜態頁面交給Nginx處理,動態頁面交給PHP-FPM模塊或Apache處理。
在Nginx的配置中,是通過location配置段配合正則匹配實現靜態與動態頁面的不同處理方式
實現動靜分離的方式有三種:
- 靜態web服務放置在公網中
- 靜態web服務放置在代理服務器中
- 靜態web服務放置在內網的單獨服務器上
常用的方案:在公網和 內網都提供靜態頁面處理的服務器
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次以上,但盡可能少重復
案例
說明:本案例(1)使用Nginx調度服務器做靜態數據處理(2)使用內網中獨立的Nginx服務器處理靜態數據
1.使用Nginx調度處理靜態數據(視屏,圖片,音樂等可視化數據),LAMP處理動態數據
(1)搭建LAMP主機
參考博客:http://www.cnblogs.com/zhichaoma/p/7487186.html
(2)配置Nginx調度服務器
搭建Nginx服務:參考博客:http://www.cnblogs.com/zhichaoma/p/7570210.html
在server{};段中加入以下代碼
location ~ \.php$ { #匹配以.php為結尾的動態頁 proxy_pass http://LAMP的IP地址(192.168.10.10); #proxy_xy 意思是代理交給誰 }
檢查配置文件是否正確並啟動
nginx -t
nginx
將靜態數據文件拷貝到Nginx服務的網站根目錄下
location / { root html; //可以在這裏指定指定根目錄 index index.html index.htm; }
這裏將數據默認存放在 nginx/html/ 下
(3)在LAMP服務器上創建一個 test.php測試文件
<?php echo "Welcome to My site"."<br/>"; echo "<img src=‘1.jpg‘>"; ?>test.php
使用客戶端訪問Nginx調度服務器的IP地址,Nginx調度服務器會將php的請求轉交給LAMP服務器處理,而靜態數據(這裏是一張圖片)會從Nginx調度服務器中去取
2.使用內網中獨立的Nginx的服務器處理靜態數據
在server{};段中加入以下代碼
location ~ \.php$ { #匹配以.php為結尾的動態頁 proxy_pass http://LAMP的IP地址(192.168.10.10); #proxy_xy 意思是代理交給誰 } location ~ .*\.(gif|jpg|jpeg|bmp|swf)$ { #這段代碼意思是任意網址以這5種格式為結尾就到192.168.10.20服務器尋找資源 proxy_pass http://處理靜態數據的Nginx的服務器的IP地址(192.168.10.20); }
將靜態數據文件拷貝到Nginx服務的網站根目錄下,檢查配置文件,啟動服務,使用客戶機訪問驗證
Apache與Nginx動靜分離