nginx動靜分離後個別靜態檔案代理至後端
阿新 • • 發佈:2018-11-25
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