前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx动静分离后个别静态文件代理至后端 原

nginx动静分离后个别静态文件代理至后端 原

作者头像
拓荒者
发布2019-03-11 10:28:02
6300
发布2019-03-11 10:28:02
举报
文章被收录于专栏:运维经验分享运维经验分享

   网站通过nginx进行动静分离,但是个别静态文件开发在tomcat端配置的虚拟路径,此路径对nginx来说是不存在的,需要将这部分路径过滤并反向代理至后端处理。

1      环境介绍

1.   centos 6.5
2.   nginx 1.8
3.   tomcat 1.6

2      配置介绍

1.   nginx动静分离配置
代码语言:javascript
复制
            location ~.*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
                   {
                            root/code/qhfaxweb_re;        
                            expires      1d;
                   }
2.   nginx反向代理配置
代码语言:javascript
复制
         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配置

代码语言:javascript
复制
         server{
                   listen       80;
                   server_name  path.web.com;
                   location/ {
                   proxy_pass  http://web_cluster;
                            }
                   }
2.   通过nginx的if模块在location内过滤

   Nginx会按照配置文件出现的顺序来执行所有的rewrite阶段的指令,所以在location内设置if语句时,需要进行增加break指令,使其跳出location模块。

代码语言:javascript
复制
                             if ($uri ~ "/path/.*" ) {
                                     proxy_pass  http://web_ cluster;
                                     break;
                                     }
3.   使用匹配路径的方式
代码语言:javascript
复制
               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时,值得留意此坑!!!

代码语言:javascript
复制
分享:如何使用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({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/11/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1      环境介绍
  • 2      配置介绍
  • 3      解决方法
  • 4      总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档