最新消息:本站访问过程中有任何问题请与我联系……

Nginx反向代理通过with-http_sub_module和substitutions4nginx模块替换正文内容和URL

技术教程 xx2008 5622浏览

Nginx的反向代理功能确实很方便,简单适用,功能强大。

mortgage lenders

今天醒醒在host1free的免费VPS上也做了一个Nginx的反向代理www.xxorg.com,并通过with-http_sub_module和HttpSubModule模块替换正文内容和URL,把配置的过程记录下来。
使用官方的with-http_sub_module模块只能匹配1条规则,所以使用第三方模块HttpSubModule可以匹配多条规则
host1free的免费VPS上已经按照了lnmp套件,为了省事,直接重编译了。
一、确认已经安装了SVN.
如果安装substitutions4nginx提示错误:-bash: svn: command not found
那么就需要先安装subversion
安装命令:yum -y install subversion 二、重新编译Nginx.

wget -c http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz tar -zxf Nginx-accesskey-2.0.3.tar.gz svn checkout http://substitutions4nginx.googlecode.com/svn/trunk/ substitutions4nginx-read-only cd /root/lnmp0.9/nginx-1.0.15 ./configure –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module –with-ipv6 –with-pcre –with-http_sub_module

–add-module=/root/substitutions4nginx-read-only –add-module=/root/nginx-accesskey-2.0.3 make make install

注意:
./configure后面的参数如果路径不对找不到的话,按照实际的路径情况修改substitutions4ngin是用来做替换,支持正则式!nginx-accesskey据说可以对自己的站进行设置,用于防止他人反代,属于非必要的选项。现在已经配置好Nginx反向代理并替换正文内容和URL的环境了。
三、新建虚拟主机并配置nginx.conf
1、lnmp环境下新建虚拟主机,执行命令:/root/vhost.sh 根据提示输入域名xxorg.tvvps.com ,其他全部选n.
2、打开“/usr/local/nginx/conf/vhost”下的“xxorg.tvvps.com.conf”进行编辑,也可以下载回本地,修改后再上传。
3、修改“xxorg.tvvps.com.conf”的内容为:

  1. server
  2. {
  3. listen 80;
  4. server_name xxorg.tvvps.com; #绑定的域名
  5. root /var/www/xxorg.tvvps.com; #网站目录(搭配lnamp的时候有用处!)
  6. access_log off; #off 关闭日志
  7. location / {
  8. subs_filter ‘www.xxorg.com’ ‘xxorg.tvvps.com’ gi; #substitutions4nginx替换 (使用方法参照官方)
  9. subs_filter ‘服务器VPS折腾’ ‘TVvps.com技术支持博客’ gi; #substitutions4nginx替换

    (使用方法参照官方)

  10. proxy_set_header X-Real-IP $remote_addr;
  11. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  12. proxy_set_header Referer http://www.xxorg.com; #强制定义Referer,程序验证判断会用到
  13. proxy_set_header Host www.hostloc.com; #定义主机头,如果目标站点绑定的域名个server_name项的吻合则使用$host
  14. proxy_pass http://220.181.136.34; #指定目标,建议使用IP或者nginx自定义池
  15. proxy_set_header Accept-Encoding “”; #清除编码
  16. }
  17. }

4、重启lnmp.命令:/root/lnmp restart 到此已经完成了。打开xxorg.tvvps.com你会看到www.xxorg.com的内容,并且关键子被替换了。
五、几个有用的东西。
1、
with-http_sub_module用法:http://wiki.nginx.org/HttpSubModule
substitutions4nginx用法:http://code.google.com/p/substitutions4nginx/
Proxy设置参考nginx官方wiki说明:http://wiki.nginx.org/HttpProxyModule
2、
substitutions4nginx参数:

g(default):替换所有匹配的字符串。
i: 执行不区分大小写的匹配。
o: 只需将第一个。
r: 该模式是作为一个正则表达式处理,默认是固定的字符串。

正则表达式实际使用:

subs_filter ‘<(no?script.*?)>(.*?)<(\/no?script.*?)>’ ” gi; //替换掉全部的subs_filter ‘<(s?cript.*?)>(?:\s|\S)*?<(\/s?cript.*?)>’ ” gi; //替换掉全部的
subs_filter ‘<(i?frame.*?)>(.*?)<(\/i?frame.*?)>’ ” gi; //替换

实际测试中sub_filter比subs_filter的速度要快,但如果你开启了nginx的cache速度上可以得到改善的。
测试过程发现对gzip源的内容无法实现替换的问题
可以在server段内加入 proxy_set_header Accept-Encoding “”;
如果是替换中文词组则需要将nginx的配置文件保存为utf-8格式!

site here
zp8497586rq
zp8497586rq

转载请注明:服务器VPS折腾 » Nginx反向代理通过with-http_sub_module和substitutions4nginx模块替换正文内容和URL