Blog / 阅读

NginX 反代系列教程/小偷程序免维护/添加广告

by admin on 2014-07-25 18:37:07 in ,



发现以前写的几篇教程,挺模糊的,有人看了摸不清头脑。(由于当时我也不太懂……),现在重新写一遍,并增加注释。 如果你用的是军哥的LNMP,而且又需要替换内容,则需要重新编译nginx。如果不需要替换内容,仅用于加速自己的网站,则不需要重新编译。
1.安装Nginx
你可以用源安装/编译安装/一键包(此处省略)

2.新增虚拟主机配置文件用于反代
 
找到您的nginx conf所在位置,一般编译的在/usr/local/nginx/conf/,从源安装的在/etc/nginx
在nginx.conf的http层加入以下内容: 
01 proxy_connect_timeout    5;
02 proxy_read_timeout       60;
03 proxy_send_timeout       5;
04 proxy_buffer_size        16k;
05 proxy_buffers            4 64k;
06 proxy_busy_buffers_size 128k;
07 proxy_temp_file_write_size 128k;
08 proxy_temp_path   /home/cache/temp;
09 #临时文件目录
10 proxy_cache_path  /home/cache/path levels=1:2 keys_zone=cache_one:5m inactive=7d max_size=1g;
11 #5m为内存占用,1g为最大硬盘占用,cache_one为缓存区名字,如果修改则下文的配置亦要相应修改。


1 mkdir /home/cache/path -p
2 mkdir /home/cache/temp
3 chmod 777 -R /home/cache
新增虚拟主机配置:



1 vi /usr/local/nginx/conf/vhost/example.com.conf 
2 #example.com是你要绑定的域名
配置文件内容:{后端(ip为1.2.3.4)绑定域名example.com,前端绑定域名example.com,域名解析到前端,实现cdn加速。}
01 server{
02 listen 80;
03 server_name example.com www.example.com;   
04 #绑定的域名
05  
06 index index.php;     
07 #默认首页
08  
09 access_log off;    
10 #off 关闭日志
11  
12 location / {
13 proxy_cache_key "$scheme://$host$request_uri";
14 #缓存key规则,用于自动清除缓存。
15  
16 proxy_cache cache_one;
17 #缓存区名称,与前面定义的相同
18  
19 proxy_cache_valid  200 304 3h;
20 proxy_cache_valid 301 3d;
21 proxy_cache_valid any 10s;
22 #200 304状态缓存3小时
23 301状态缓存3天
24 其他状态缓存(如502 404)10秒
25  
26 proxy_set_header   X-Real-IP  $remote_addr;
27 proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
28 #向后端传递访客ip
29  
30 proxy_set_header   Referer http://example.com; 
31 #强制定义Referer,程序验证判断会用到
32  
33 proxy_set_header   Host $host;
34 #定义主机头
35  
36 proxy_pass http://1.2.3.4; 
37 #指定后端ip,可以加端口
38  
39 #proxy_cache_use_stale invalid_header error timeout http_502;
40 #当后端出现错误、超时、502状态时启用过期缓存,慎用。
41         }
42 }
如无意外,重启nginx后把example.com绑定到前端就可以访问了
1 /etc/init.d/nginx restart

下面介绍的是反代别人的网站(类似于小偷),并替换相关内容

1.编译nginX:
01 cd /root
02 apt-get update
03 apt-get install -y git gcc g++ make automake
04 #安装依赖包,Centos将apt-get更改为yum
05 git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module
06 wget http://nginx.org/download/nginx-1.2.8.tar.gz
07 tar zxvf nginx-1.2.8.tar.gz
08 cd nginx-1.2.8
09 ./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-http_sub_module --add-module=/root/ngx_http_substitutions_filter_module
10 make
11 make install
如果您用的系统是Debian,就不需要编译了。
1 echo "deb http://packages.dotdeb.org squeeze all" >>/etc/apt/sources.list
2 echo "deb-src http://packages.dotdeb.org squeeze all" >>/etc/apt/sources.list
3 #添加dotdeb源,已多次介绍dotdeb源的好处
4 apt-get update
5 apt-get install nginx-full
6 #nginx-full这个包里面包含着所有需要用到的模块。

2.修改nginx.conf

编译的在/usr/local/nginx/conf/nginx.conf,源安装的在/etc/nginx/nginx.conf

以example.com反代www.baidu.com并替换内容为例:
01 user  www;
02 worker_processes  2;
03  
04 #error_log  logs/error.log;
05 #error_log  logs/error.log  notice;
06 error_log  logs/error.log  info;
07 pid        logs/nginx.pid;
08  
09 events {
10                 use epoll;
11     worker_connections  1024;
12 }
13  
14 http {
15  … #此处省略一万字
16                 proxy_connect_timeout    5;
17                 proxy_read_timeout       60;
18                 proxy_send_timeout       5;
19                 proxy_buffer_size        16k;
20                 proxy_buffers            4 64k;
21                 proxy_busy_buffers_size 128k;
22                 proxy_temp_file_write_size 128k;
23                 proxy_temp_path   /home/cache/temp;
24                 proxy_cache_path  /home/cache/one levels=1:2 keys_zone=cache_one:3m inactive=7d max_size=1g;
25  
26 server {
27    listen       80;
28    server_name  example.com;
29    index index.php;     
30         #默认首页
31  
32   location / {
33     subs_filter_types text/html text/css text/xml;
34     subs_filter www.baidu.com example.com gi;
35 #替换模块,下文详解。
36  
37     proxy_cache_key "$scheme://$host$request_uri";
38 #缓存key规则,用于自动清除缓存。
39  
40     proxy_cache cache_one;
41 #缓存区名称,必须与前面定义的相同
42  
43     proxy_cache_valid  200 304 3h;
44     proxy_cache_valid 301 3d;
45     proxy_cache_valid any 10s;
46 #200 304状态缓存3小时
47 #301状态缓存3天
48 #其他状态缓存(如502 404)10秒
49  
50     proxy_set_header   X-Real-IP  $remote_addr;
51     proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
52 #向后端传递访客ip
53  
54     proxy_set_header   Referer http://www.baidu.com;   
55 #强制定义Referer,程序验证判断会用到
56  
57     proxy_set_header   Host www.baidu.com;
58 #定义主机头
59  
60     proxy_pass http://1.2.3.4; 
61 #指定后端ip
62  
63     proxy_set_header Accept-Encoding "";   
64 #清除编码
65  
66    proxy_cache_use_stale invalid_header error timeout http_502;
67 #当后端出现错误、超时、502状态时启用过期缓存
68         }
69     }
70 }

温馨提示:如果您要替换的内容里面有中文,请将conf文件保存为utf-8 without BOM编码。
关于ngx_http_substitutions_filter_module的说明:(本模块是中国人写的,但是说明只有英文版,在此我翻译一下)
描述 nginx_substitutions_filter 是一个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*: 正则。

先讲这么多,有错误欢迎提出。
关于自动清空缓存的,我也没弄明白,先不写了。

*参考资料:
Nginx Wiki   http://wiki.nginx.org/HttpProxyModule
YaoWeibin Github    https://github.com/yaoweibin/ngx_http_substitutions_filter_module


写评论

相关文章

上一篇:LNMP忘记MYSQL密码重置mysql root密码方法

下一篇:单路CPU性能排名

评论

写评论

* 必填.

分享

栏目

赞助商


热门文章

Tag 云