首页 > Nginx > 备案时批量反向代理网站

备案时批量反向代理网站

最近个人备案需要转成企业备案,过程中需要注销备案再转入备案,导致该域名暂时不可用,于是使用了一个备用域名(com.cn来代替com进行访问)。

问题来了,源网站的html文件都是静态生成,所有的超链接为绝对路径不可更改,使用备用域名后希望仍然使用纯静态的html,而非使用动态替换技术。因此,只能在nginx配置文件上进行修改,刚好有这么一款“小偷程序”满足需求。


ngx_http_substitutions_filter_module是nginx的一个模块,提供了文本正则替换功能,可以替换网页上超链接,因此,常用于网站镜像(小偷程序,偷换广告)。


该模块是中国人写的,跟apache的mod_substitute模块一样,使用举例:

location / {
	subs_filter_types text/html text/css text/xml; subs_filter st(\d*).example.com $1.example.com ir; subs_filter a.example.com s.example.com;
}

涉及指令:

* subs_filter_types

* subs_filter

subs_filter_types 语法: *subs_filter_types mime-type [mime-types] *

默认: *subs_filter_types text/html*

内容: *http, server, location*

*subs_filter_types* 是用来指定替换文件类型的 默认仅仅替换 text/html 类型的文件。


proxy_set_header Accept-Encoding “”;

subs_filter 语法: *subs_filter source_str destination_str [gior] *


默认: *none*

内容: *http, server, location*


*subs_filter* 是用来替换文本的,可以使用正则

* *g*(默认):替换匹配项。

* *i*:区分大小写的匹配

* *o*: 只匹配发现的第一个。

* *r*: 正则。


先下载这个包:https://github.com/yaoweibin/ngx_http_substitutions_filter_module

解压到/home/data目录下:

unzip ngx_http_substitutions_filter_module-master.zip

由于之前nginx没有安装这个模块,因此需要重新编译添加这个模块,我们先看看当前nginx里面有哪些模块:

/usr/local/nginx/sbin/nginx -V
--user=www --group=www --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --with-http_ssl_module --with-http_realip_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi

进入nginx源码目录,编译的时候,根据上面列出来的还需要增加以下参数:

cd /home/data/nginx-1.12.1
./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--with-http_ssl_module \
--with-http_realip_module \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--add-module=/home/data/ngx_http_substitutions_filter_module-master
make

千万不要make install,因为是动态编译会产生一个nginx二进制文件,make install会覆盖之前的,我们先备份一下。

cp -pR /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
cp -pR ./objs/nginx /usr/local/nginx/sbin/
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
/usr/local/nginx/sbin/nginx -s reload

重启前先验证一下配置文件有没有问题,没有问题再重启。


开始修改配置文件,以镜像百度为例:

server
{
	listen       80;
	server_name www.example.com;

	index index.html index.htm index.php default.html default.htm default.php;
	root  /home/www/html/wordpress;

	#默认首页

	location / {
		subs_filter_types text/css text/xml;
		subs_filter www.baidu.com www.example.com gi;
		#替换模块,下文详解。

		proxy_cache_key "$scheme://$host$request_uri";
		#缓存 key 规则,用于自动清除缓存。

		proxy_cache cache_one; 
		#缓存区名称,必须与前面定义的相同

		proxy_cache_valid  200 304 3h;
		proxy_cache_valid 301 3d;
		proxy_cache_valid any 10s;
		#200 304 状态缓存 3 小时
		#301 状态缓存 3 天
		#其他状态缓存(如 502 404)10 秒

		proxy_set_header   X-Real-IP  $remote_addr;
		proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
		#向后端传递访客 ip

		proxy_set_header   Referer http://www.baidu.com;	
		#强制定义 Referer,程序验证判断会用到

		proxy_set_header   Host www.baidu.com;
		#定义主机头

		proxy_pass http://www.baidu.com;	
		#指定后端 ip

		proxy_set_header Accept-Encoding "";	
		#清除编码

		proxy_cache_use_stale invalid_header error timeout http_502;
		#当后端出现错误、超时、502 状态时启用过期缓存
    }
	
	access_log  /var/logs/nginx/example/www.example.com.log main;
}


如果是全新安装nginx时希望带上此扩展:

#解压编译安装
unzip -o /home/data/ngx_http_substitutions_filter_module-master.zip

cd ${nginxPackage}
./configure \
--user=www \
--group=www \
--prefix=${installPath} \
--sbin-path=${installPath}/sbin/nginx \
--conf-path=${installPath}/conf/nginx.conf \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--with-http_ssl_module \
--with-http_realip_module \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-http_sub_module \
--add-module=/home/data/ngx_http_substitutions_filter_module-master


本文地址:http://blog.zhengshuiguang.com/nginx/nginx-proxy.html

转载随意,但请附上文章地址:-)

标签:镜像

评论已关闭