博客已经成功切换为 Wordpress! My blog has been switched to Wordpress!

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

技术分享 edwardfang 4年前 (2014-07-25) 16次浏览 4个评论
nginx-logo.png
发现以前写的几篇教程,挺模糊的,有人看了摸不清头脑。(由于当时我也不太懂……),现在重新写一遍,并增加注释。
如果你用的是
军哥的 LNMP,而且又需要替换内容,则需要重新编译 nginx。如果不需要替换内容,仅用于加速自己的网站,则不需要重新编译。

1.安装 Nginx

你可以用源安装/编译安装/一键包(此处省略)

2.新增虚拟主机配置文件用于反代

找到您的 nginx conf 所在位置,一般编译的在/usr/local/nginx/conf/,从源安装的在/etc/nginx
在 nginx.conf 的 http 层加入以下内容:

proxy_connect_timeout    5;
proxy_read_timeout       60;
proxy_send_timeout       5;
proxy_buffer_size        16k;
proxy_buffers            4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path   /home/cache/temp;
#临时文件目录
proxy_cache_path  /home/cache/path levels=1:2 keys_zone=cache_one:5m inactive=7d max_size=1g;
#5m 为内存占用,1g 为最大硬盘占用,cache_one 为缓存区名字,如果修改则下文的配置亦要相应修改。

mkdir /home/cache/path -p
mkdir /home/cache/temp
chmod 777 -R /home/cache

新增虚拟主机配置:

vi /usr/local/nginx/conf/vhost/example.com.conf  
#example.com 是你要绑定的域名

配置文件内容:{后端(ip 为 1.2.3.4)绑定域名 example.com,前端绑定域名 example.com,域名解析到前端,实现 cdn 加速。}

server{
listen 80;
server_name example.com www.example.com;    
#绑定的域名

index index.php;      
#默认首页

access_log off;		
#off 关闭日志

location / {
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://example.com;	
#强制定义 Referer,程序验证判断会用到

proxy_set_header   Host $host;
#定义主机头

proxy_pass http://1.2.3.4;	
#指定后端 ip,可以加端口

#proxy_cache_use_stale invalid_header error timeout http_502;
#当后端出现错误、超时、502 状态时启用过期缓存,慎用。
        }
}

如无意外,重启 nginx 后把 example.com 绑定到前端就可以访问了

/etc/init.d/nginx restart

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

1.编译 nginX:

cd /root
apt-get update
apt-get install -y git gcc g++ make automake
#安装依赖包,Centos 将 apt-get 更改为 yum
git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module
wget http://nginx.org/download/nginx-1.2.8.tar.gz
tar zxvf nginx-1.2.8.tar.gz
cd nginx-1.2.8
./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
make
make install

如果您用的系统是 Debian,就不需要编译了。

echo "deb http://packages.dotdeb.org squeeze all" >>/etc/apt/sources.list
echo "deb-src http://packages.dotdeb.org squeeze all" >>/etc/apt/sources.list
#添加 dotdeb 源,已多次介绍 dotdeb 源的好处
apt-get update
apt-get install nginx-full
#nginx-full 这个包里面包含着所有需要用到的模块。

2.修改 nginx.conf

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

以 example.com 反代 www.baidu.com 并替换内容为例:

user  www;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;
pid        logs/nginx.pid;

events {
                use epoll;
    worker_connections  1024;
}

http {
 … #此处省略一万字
                proxy_connect_timeout    5;
                proxy_read_timeout       60;
                proxy_send_timeout       5;
                proxy_buffer_size        16k;
                proxy_buffers            4 64k;
                proxy_busy_buffers_size 128k;
                proxy_temp_file_write_size 128k;
                proxy_temp_path   /home/cache/temp;
                proxy_cache_path  /home/cache/one levels=1:2 keys_zone=cache_one:3m inactive=7d max_size=1g; 

server {
   listen       80;
   server_name  example.com;
   index index.php;      
        #默认首页

  location / {
    subs_filter_types text/html text/css text/xml;
    subs_filter www.baidu.com 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://1.2.3.4;	
#指定后端 ip

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

   proxy_cache_use_stale invalid_header error timeout http_502;
#当后端出现错误、超时、502 状态时启用过期缓存
        }
    }
}

温馨提示:如果您要替换的内容里面有中文,请将 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


回味依旧 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:NginX 反代系列教程/小偷程序免维护/添加广告
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(4)个小伙伴在吐槽
  1. 用了你这个脚本后,WORDPRESS首页不更新是怎么回事啊
    li2016-10-15 14:54 回复
  2. 这个,可以加速国外站点
    Andrew2015-02-07 22:15 回复