网站通过nginx进行动静分离,但是个别静态文件开发在tomcat端配置的虚拟路径,此路径对nginx来说是不存在的,需要将这部分路径过滤并反向代理至后端处理。
location ~.*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root/code/qhfaxweb_re;
expires 1d;
}
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;
}
/path/down.myapp.com/Android.apk
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;
}
}
Nginx会按照配置文件出现的顺序来执行所有的rewrite阶段的指令,所以在location内设置if语句时,需要进行增加break指令,使其跳出location模块。
if ($uri ~ "/path/.*" ) {
proxy_pass http://web_ cluster;
break;
}
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;
}
各位运维小伙伴,一定要注意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
(adsbygoogle = window.adsbygoogle || []).push({});