Nginx動(dòng)靜分離簡(jiǎn)單來(lái)說(shuō)就是把動(dòng)態(tài)跟靜態(tài)請(qǐng)求分開(kāi),不能理解成只是單純的把動(dòng)態(tài)頁(yè)面和靜態(tài)頁(yè)面物理分離。嚴(yán)格意義上說(shuō)應(yīng)該是動(dòng)態(tài)請(qǐng)求跟靜態(tài)請(qǐng)求分開(kāi),可以理解成使用Nginx處理靜態(tài)頁(yè)面,Tomcat處理動(dòng)態(tài)頁(yè)面。
動(dòng)靜分離從目前實(shí)現(xiàn)角度來(lái)講大致分為兩種,一種是純粹的把靜態(tài)文件獨(dú)立成單獨(dú)的域名,放在獨(dú)立的服務(wù)器上,也是目前主流推崇的方案;另外一種方法就是動(dòng)態(tài)跟靜態(tài)文件混合在一起發(fā)布,通過(guò)nginx來(lái)分開(kāi)。通過(guò)location指定不同的后綴名實(shí)現(xiàn)不同的請(qǐng)求轉(zhuǎn)發(fā)。
Nginx的相關(guān)知識(shí)
/usr/sbin/nginx:主程序
/etc/nginx:存放配置文件
/usr/share/nginx:存放靜態(tài)文件
/var/log/nginx:存放日志
$sudo/etc/init.d/nginx start
location匹配規(guī)則:
= 開(kāi)頭表示精確匹配
^~ 開(kāi)頭表示uri以某個(gè)常規(guī)字符串開(kāi)頭,理解為匹配 url路徑即可。nginx不對(duì)url做編碼,因此請(qǐng)求為/static/20%/aa,可以被規(guī)則^~ /static/ /aa匹配到(注意是空格)。
~ 開(kāi)頭表示區(qū)分大小寫(xiě)的正則匹配
~*? 開(kāi)頭表示不區(qū)分大小寫(xiě)的正則匹配
!~和!~*分別為區(qū)分大小寫(xiě)不匹配及不區(qū)分大小寫(xiě)不匹配 的正則
/ 通用匹配,任何請(qǐng)求都會(huì)匹配到。
多個(gè)location配置的情況下匹配順序?yàn)?/p>
首先匹配 =,其次匹配^~, 其次是按文件中順序的正則匹配,最后是交給 / 通用匹配。當(dāng)有匹配成功時(shí)候,停止匹配,按當(dāng)前匹配規(guī)則處理請(qǐng)求。
其中最核心的就是"proxy_pass?http://localhost:8080;"這條配置,它將匹配到的請(qǐng)求都轉(zhuǎn)發(fā)給Tomcat去處理。
其他的配置:
[if !supportLists]·???????[endif]proxy_set_header Host $host; 后端的Web服務(wù)器可以通過(guò)X-Forwarded-For獲取用戶(hù)真實(shí)IP。
[if !supportLists]·???????[endif]client_max_body_size 10m; 允許客戶(hù)端請(qǐng)求的最大單文件字節(jié)數(shù)。
[if !supportLists]·???????[endif]client_body_buffer_size 128k; 緩沖區(qū)代理緩沖用戶(hù)端請(qǐng)求的最大字節(jié)數(shù)。
[if !supportLists]·???????[endif]proxy_connect_timeout 90; Nginx跟后端服務(wù)器連接超時(shí)時(shí)間。
[if !supportLists]·???????[endif]proxy_read_timeout 90; 連接成功后,后端服務(wù)器響應(yīng)時(shí)間。
[if !supportLists]·???????[endif]proxy_buffer_size 4k; 設(shè)置代理服務(wù)器保存用戶(hù)頭信息的緩沖區(qū)大小。
[if !supportLists]·???????[endif]proxy_buffers 6 32k; proxy_buffers緩沖區(qū)。
[if !supportLists]·???????[endif]proxy_busy_buffers_size 64k; 高負(fù)荷下緩沖大小。
[if !supportLists]·???????[endif]proxy_temp_file_write_size 64k; 設(shè)定緩存文件夾大小。
Nginx配置文件server配置如下:
server {
???????????listen 9999;
???????????server_name localhost;
???????????location /{
???????????????#可以用proxy_pass 轉(zhuǎn)發(fā)到負(fù)載均衡或者某個(gè)http://
??????????????? root html;
??????????????? index heyjia.html index.html;
??????????????? }
????????????location ~.*\.(html|htm|gif|jpg|jpeg|png|bmp|ico|txt|css|js)
????????????{
??????????????? #匹配到此格式的,到static文件夾找圖片
??????????????? root /data/webapps/static;
????????????? }
????????????location ~.*\.(jsp|php|cgi|sgtml|do){
??????????????? #匹配到這些格,轉(zhuǎn)發(fā)到tomcat服務(wù)器上
??????????????? proxy_passhttp://localhost:8080;
???????????}
???? ?}
如果要使用動(dòng)態(tài)均衡,,轉(zhuǎn)發(fā)到相關(guān)的負(fù)載均衡名即,配置如下
upstream tdt_app
?{
??? server?? ip:8080 weight=1 max_fails=2fail_timeout=30s;
??? server?? ip:8081 weight=1 max_fails=2fail_timeout=30s;
}