反向代理相对于正向代理,正向代理是客户端使用的,用来连接服务器;反向代理是服务器使用的,用来对外提供服务。

具体实现方法:

假如我要在VPS上建一个t.xxx.net的域名用来反向代理访问twitter,首先解析域名t.xxx.net添加A记录到VPS的IP上,在VPS上修改Nginx的配置文件,添加如下:
在VPS上修改Nginx的配置文件,具体指的是哪个文件?

/usr/local/nginx/conf/nginx.conf

server
{
listen          80;
server_name     t.xxx.net;

location / {
proxy_pass              http://twitter.com/;
proxy_redirect          off;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

添加好后,先执行:/usr/local/nginx/sbin/nginx -t 检查配置是否正常,如果显示:the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok      configuration file /usr/local/nginx/conf/nginx.conf test is successful 则正常,否则按错误提示修改配置。

再执行 kill -HUP `cat /usr/local/nginx/logs/nginx.pid` 使配置生效,域名解析生效后就可以通过t.xxx.net 访问twitter

反向代理任何网站,都是只能反向代理首页,如果要替换里面的链接就需要再安装第三方模块
http://wiki.nginx.org/HttpSubsModule#Installation

在VPS下添加了多个虚拟主机,在/usr/local/nginx/conf/vhost 下有相应的XXX.COM.CONF
是不是在/usr/local/nginx/conf/nginx.conf添加了上面这段代码后用 XXX.COM.CONF就失效了?
或者是修改在XXX.COM.CONF,去掉原先所有代码,添加这段代码?

不管是要不要用XXX.COM作为要使用的域名, 都可以直接编辑XXX.COM.conf
添加上上面的代码,只要配置对就行

我设置了a.com代理b.com,然后我成功访问了b.com,为何b.com上的页面内容里包含b.com的链接变成a.com了?如http://item.b.com/?id=123 -》 http://item.a.com/?id=123

用Nginx的反向代理可以轻松山寨对方的网站,但是反向代理后的网站还是有对方的绝对链接时,怎么办?所以要用替换链接方法。

1 使用官方的的模块 编译参数–with-http_sub_module
ub_filter 源网站链接 替换自己的链接;
sub_filter_once off;
只能匹配1行
http://wiki.nginx.org/HttpSubModule
2 使用第三方模块
svn checkout http://substitutions4nginx.googlecode.com/svn/trunk/substitutions4nginx-read-only
编译参数–add-module=模块地址
http://wiki.nginx.org/HttpSubsModule#Installation
3 自己加广告等等代码可以
sub_filter ” ‘你的XXX代码’;
sub_filter_once on;
Apache 和 Nginx本身都有关键词替换功能,就是说,你不需要安装任何额外的软件,甚至连 php/mysql 都省了,只要用 Apache 或者 nginx 就可以实现网站克隆/伪原创。

要点只有2个:
1. 反向代理
2. 关键词替换
下面就讲讲过程 (centos-32bit)
1. nginx + substitutions 安装
nginx 自带一个Substitution模块,但该模块只能写一行,所以我们改用 substitutions

下面是安装一些预备软件
代码:
yum -y –noplugins install wget zip
yum -y –noplugins install unzip
yum -y –noplugins install gcc
yum -y –noplugins install make
yum -y –noplugins install pcre-devel
yum -y –noplugins install openssl-devel

下载软件
代码:
wget -c http://www.nginx.org/download/nginx-1.0.8.tar.gz //下载nginx
svn checkout http://substitutions4nginx.googlecode.com/svn/trunk/ substitutions4nginx-read-only //下载substitutions

编译软件
代码:
tar zxf nginx-1.0.8.tar.gz
cd nginx-1.0.8.tar.gz
./configure ./configure –add-module=path/substitutions4nginx-read-only //注意这里的path是相对应的真实路径
make
make install
此时,nginx应该安装在于 /usr/local/nginx 下面

配置 nginx.conf
代码:
server_name www.urdomain.com;
location / {
subs_filter ca-pub-9805743306566114 ca-pub-98057433063434; //把google ad 的用户号 ca-pub-9805743306566114 改成你自己的,比如 ca-pub-98057433063434
subs_filter 6121088089 612108343455; //把google ad 的广告号 6121088089 改成你自己的,比如 612108343455 ,你懂的!:D
proxy_pass www.urdomain.com; //反向代理美国主机村。 最好找一些带有google 广告的网站,主机村在 google 收录 34万条,百度收录几乎没有,这或许是.info 的失败,也是为什么我们选择这样的网站来反代的原因。
index index.html index.htm;
}
记住subs_filter 命令的格式,比如我把网站的网址 www.aaa.com 替换成 www.bbb.com
反向代理的个数是不限制的,只要掌握了规则,一个网站下可以包含多个网站镜像。 一个nginx 上也可以跑多个网站。
最后,别忘了把logo地址替换成自己的。

 

Nginx反向代理并替换原网址

为了能替换url,编译Nginx时需要加上with-http_sub_module模块。
如果用的是军哥的lnmp,可以尝试使用军哥的nginx升级脚本,在脚本中的约78行加入 –with-http_sub_module参数。LNMP一键安装包 自动无缝升级Nginx至任意版本,专门升级Nginx:
执行命令:

wget soft.vpser.net/lnmp/upgrade_nginx.sh;sh upgrade_nginx.sh

可以升级Nginx至任意官方已发布的Nginx版本
然后按提示输入要升级的Nginx版本号,Nginx的版本号可以从http://nginx.org/en/download.html查询。输入版本号后回车,再次回车确认即可开始安装,如果不出意外就会升级成功

编辑nginx的conf文件:

location / {
sub_filter aaaa.com bbb.com;  #bbb.com是反向的域名,这里就是为了替换原域名aaaa.com
sub_filter_once off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Referer http://neolee.com;
proxy_set_header Host neolee.com;
proxy_pass http://1.2.3.4; #被代理网站的IP地址
proxy_set_header Accept-Encoding “”;
}

with-http_sub_module模块只支持一条记录的替换,如果需要替换多个地方,需要substitutions4nginx这个第三方模块。

 

相关信息:http://www.xxorg.com/archives/9

http://jybb.me/nginx-proxy-pass

lnmp教程:Nginx反向代理实战(即:小偷)

作者 admin

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注