1. 程式人生 > >nginx動靜分離後個別靜態檔案代理至後端

nginx動靜分離後個別靜態檔案代理至後端

nginx動靜分離後個別靜態檔案代理至後端

vekergu關注1人評論16783人閱讀2015-07-21 16:12:47  

 

   網站通過nginx進行動靜分離,但是個別靜態檔案開發在tomcat端配置的虛擬路徑,此路徑對nginx來說是不存在的,需要將這部分路徑過濾並反向代理至後端處理。

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.apk

3      解決方法

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

a)URL rewrite設定

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

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模組。

 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時,值得留意此坑!!!

 

 

分享:如何使用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