nginx動靜分離後個別靜態文件代理至後端

nginx動靜分離後個別靜態文件代理至後端

 

   網站經過nginx進行動靜分離,可是個別靜態文件開發在tomcat端配置的虛擬路徑,此路徑對nginx來講是不存在的,須要將這部分路徑過濾並反向代理至後端處理。css

1      環境介紹

1.   centos 6.5

2.   nginx 1.8

3.   tomcat 1.6

2      配置介紹

1.   nginx動靜分離配置

location ~.*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root/code/qhfaxweb_re; expires 1d; }
 

2.   nginx反向代理配置

upstreamweb_cluster { server 192.168.1.62:6805 weight=1 max_fails=2fail_timeout=30s; server 192.168.1.63:6806 weight=2 max_fails=2fail_timeout=30s; }
 

3.   須要方向代理至後端的靜態路徑

/path/down.myapp.com/Android.apkhtml

3      解決方法

1.   經過URL rewrite至另外一server,直接反向代理後端

a)URL rewrite設置nginx

rewrite  ^/path/(.*) http://path.web.com/path/$1 last;web

b)       server配置後端

server{ listen 80; server_name path.web.com; location/ { proxy_pass http://web_cluster; } }
 

2.   經過nginx的if模塊在location內過濾

   Nginx會按照配置文件出現的順序來執行全部的rewrite階段的指令,因此在location內設置if語句時,須要進行增長break指令,使其跳出location模塊。centos

if ($uri ~ "/path/.*" ) { proxy_pass http://web_ cluster; break; }
 

3.   使用匹配路徑的方式

location ^~/path/ { proxy_passhttp://image.qhfax.com:8800; break; } location ~.*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root/code/qhfaxweb_re; expires 1d; }
 

 

4      總結

   各位運維小夥伴,必定要注意nginx在執行rewrite是順序執行的,在出現if選擇時,if模塊和以後執行的步驟有衝突就須要使用break跳出,再也不匹配以後的rewrite了,你們平時配置nginx時,值得留意此坑!!!tomcat

 

 

分享:如何使用nginx對動態請求中參數進行跳轉 問題:有時候們在作rewrite,發現新的URL中獲取參數的方法不同了,若是在rewrite中直接去該參數爲變量,那麼你會發 現,規則是不成功的,nginx過濾了參數,這個使用就要使用nginx提供的$arg功能模塊了,具體操做以下: if ( $arg_function ~'GetNewDetail') { rewrite ^/cgi/news/NewAndNotice?(.*) /about/getArticleDetail/news/$arg_newIdlast; break; } 上面$arg_function中的function爲URL中的參數名,相似於/promotion/recommend.jsp?campaign_id=94926c22-9df4-11e3-82d5-b8ca3aecba9a&c_channel=tyq&c_keywords=01 中campaign_id或c_channel或keywords,直接抓取參數不一樣的進行匹配,而後再rewrite
相關文章
相關標籤/搜索