找回密码
 立即注册
查看: 9188|回复: 0

nginx反代加替换教程

[复制链接]
发表于 2012-11-13 22:25:40 | 显示全部楼层 |阅读模式
1、安装Nginx# \9 T0 T! K+ A
[mw_shl_code=applescript,true]yum -y install gcc g++ vim libncurses5-dev make libxml2-dev
2 T, |+ E3 y, Z( j9 ^yum -y install subversion
6 I$ ?+ E1 I# y: X# dyum -y install libpcre3 libpcre3-dev libcurl4-openssl-dev2 C3 v0 u4 Z  G: f- c$ N" z2 d
yum -y install pcre* zlib* openssl*/ e) T, f. T# p' X4 Q5 J- f. _
wget -c  http://nginx.org/download/nginx-1.0.5.tar.gz
+ ?8 s% c- f% z1 l0 }tar -zxf nginx-1.0.5.tar.gz
4 d) }/ e, O9 u8 @% n& Y( Uwget -c http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz: K: O  C: u/ i# }  t4 F& s. p
tar -zxf Nginx-accesskey-2.0.3.tar.gz) H) Q7 E+ {5 N# D0 p% L
svn checkout http://substitutions4nginx.googlecode.com/svn/trunk/ substitutions4nginx-read-only1 [* j' Z. B) Y. y' l1 G
curdir=$(pwd)
. X9 P6 b* k! A: e/ E6 X, xcd nginx-1.0.5
7 t0 W- `: ~, w1 b& Y; d4 ?$ A./configure --user=nobody --group=nobody  --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --pid-path=/var/run/nginx.pid  --conf-path=/etc/nginx/nginx.conf   --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with-pcre --with-http_sub_module --add-module=$curdir/substitutions4nginx-read-only --add-module=$curdir/nginx-accesskey-2.0.3
- N9 H" n/ l( W& A2 f9 ^/ Rmake
# a3 c9 q6 \, K* d0 Tmake install
5 }9 m! R+ ^: V; n6 O# o0 B[/mw_shl_code]
/ }7 H% e4 @9 U
% n! F3 l( q" \6 _, _5 m& q, O
谷歌代码即将关闭,新增以下自己对照修改上面代码:
  `8 u5 w8 I# `) n[mw_shl_code=applescript,true]killall -9 nginx" K/ A* s( i; M+ l3 e6 ~1 k
/etc/init.d/nginx stop #停止nginx
8 j5 n, k: a# \7 B0 ~8 r
% ], A6 V3 t1 v  g. G9 U3 s# ncd /root* J/ I8 X9 s/ n# d6 ]0 X
yum update( I4 Z( l. t7 J: S" i. r
yum install -y git gcc g++ make automake #安装依赖包2 \* ^* L2 A2 U" M
git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module[/mw_shl_code]
0 `' l) ~2 p! N4 T' F2 ^0 i: M8 C) B
2、配置nginx.conf" d: l7 N0 l6 ]
编辑/etc/nginx/nginx.conf; {. y" P) P# E  e5 n7 }
[mw_shl_code=applescript,true]server{
6 ^8 d6 j& Z9 H/ ?1 o- ylisten 80;
" _/ Y1 f" \# L4 u" B' G. t1 Aserver_name t.playvps.com;  #绑定的域名6 G. m. ~+ d$ Y( `9 C
access_log off;                #off 关闭日志
7 v8 O$ w& s" Alocation / {
/ e: m; z4 }9 j; D- v; B3 V7 ssubs_filter 'www.baidu.com' 't.playvps.com' gi;  #substitutions4nginx替换 (使用方法参照官方)  s" j5 U$ [$ C' Q8 r
proxy_set_header   X-Real-IP  $remote_addr;, W: C# Q! o0 o" B& C
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
, q5 ?8 p# j, ^/ Vproxy_set_header   Referer http://www.baidu.com;        #强制定义Referer,程序验证判断会用到8 r' B# c# y! N% n
proxy_set_header   Host www.baidu.com;                  #定义主机头,如果目标站点绑定的域名个server_name项的吻合则使用$host9 l- X/ C7 J; N  `, u1 d& b6 p
proxy_pass http://www.baidu.com;                        #指定目标,建议使用IP或者nginx自定义池
2 D5 O$ I$ |. a0 tproxy_set_header Accept-Encoding "";                        #清除编码
8 l/ C' ]3 [: k: U- l. r+ U7 w        }& X: l3 q" T  q6 I/ F4 z' q
}* m6 J2 h) M3 F' u- E) x
[/mw_shl_code]( `* ]: Y7 X8 z! F
3.重启Nginx
) R! t/ Z% i, Y1 Z. h[mw_shl_code=applescript,true]pkill nginx #关闭进程" g* {$ m, Q& z+ F% \2 z
nginx #启动Nginx[/mw_shl_code]
5 ]& |5 ~& _! x2 w5 P0 K2 E6 Y* N# M$ _0 D0 \2 b  ~) E
以下为一些配置例子作为参考
6 N$ K, f) F9 ?1 Y1 p" w6 \/ \如果替换中文要注意网站配置文件的编码如果是utf8则汉字utf8转二进制表现形式(文后解释)
  i4 c( u& u) C2 b7 J6 N3 p
[mw_shl_code=applescript,true]server{5 o% k. }5 q9 F2 |. @; \& D

* r$ ^* p) H* W; D5 Vlisten 80;0 P6 k7 f( r* ]1 s/ y- Z

- J1 M3 I7 g2 m$ i4 y$ xserver_name a.a; * y4 {0 H. z6 N1 l
access_log off;               
; B4 F; |( H4 `, I, glocation / {' X1 v6 c: `! @4 ?7 u

& a) E+ F1 Q4 G7 S0 N* F- V3 Rproxy_cache cache_one;
$ c7 z2 |& Q0 W 4 W4 Z/ ^, @& ^9 {" G; Z: J
proxy_cache_valid  200 304 1s; " _3 h! ^  R0 `# U0 {/ E& g. o
proxy_cache_key $host$uri$is_args$args;+ ?8 \# e2 q6 P: O

/ D( c' o4 _- x; f5 M, u$ Vsubs_filter www.hostloc.com j.baidu.wf;
+ ~+ d# x: B; V3 B$ M- E# k# |; M   f1 Q& `6 u/ D- D. ^; Y
subs_filter static/image/common/logo.png /img/xxx.jpg;# V" x  A! u4 \+ b

" D4 ?& H# C- q- S2 i2 p7 I* \subs_filter 全球主机交流论坛 全球MJJ交流论坛
, e! O$ M; Q  h" K' @' c
7 m2 l) Y! H6 osubs_filter '美国' '米国' ;
) n7 Z4 _4 W9 G2 N
5 ^- n/ h7 x; n6 H& K: y! O) l" i0 Jproxy_set_header   X-Real-IP  $remote_addr;5 \  w5 h3 O1 d; x
. @1 ^7 M! a- l. t: S. D& O
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
( j( e# Y" b0 |2 b . A0 t" H7 t1 x5 J2 u3 `
proxy_set_header   Referer http://www.hostloc.com;        % ?$ G( n7 ^8 X# T( j9 z; k
proxy_set_header   Host www.hostloc.com;                  6 j$ \; Y0 X1 V$ G  z
proxy_pass http://www.hostloc.com;                        
: I4 \0 U8 S& ^! m" uproxy_set_header Accept-Encoding "";               
  }  {3 D. W: O, C( `/ Eexpires 5h;
9 V& [' Y9 E& G+ m        }  D8 b$ l* Y4 e+ z
! ?) Y- K& ?; j" o3 H" N

! M$ @5 o) }6 U# ^}[/mw_shl_code]
  n5 m  K# v6 m( a" \  W/ c5 _0 v; C3 U& K! T/ _9 i
中文还是弄不明白,看这:
, X. p& c  c  H* _中文的特殊性中文匹配替换可以在本模块中进行,但是需要知道所匹配中文的编码方式及其最终的二进制表示形式,而且只能采用正则匹配替换的方法。
6 [: i5 R. P1 `# q% P比如: $ w/ {5 B- j0 C- [6 i, k7 a
“你好”的unicode表示为:  0x4f60 0x597d; s8 T% T4 U9 G; A
  
1 K7 b$ a7 ]9 c! l6 h$ V6 p: i$ M而其utf-8的表示为:  0xe4bda0 0xe5a5bd
" H. X: E: a  x2 ^2 c  
, X# @/ v! J2 Z% E& t" P查看二进制中文的表示方法方法1如果是Unicode或者GB的有其固定对应的二进制表示形式,你可以去查表。utf-8你可以自己转换,但是比较麻烦。转换的方法看这里(http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) * z. o0 Y! p0 y& p& O' o
方法2把对应编码的网页下载下来,然后用二进制形式查看其内容,可以看到对应汉字的二进制表示(vim中可以输入命令':%!xxd')。 2 |" R: b3 S1 e: t+ M6 ^
例子把‘你好’替换成‘aaabbb’  subs_filter '\xe4\xbd\xa0\xe5\xa5\xbd' 'aaabbb' r;
9 b- {+ p) K+ M) d4 {& t; Z 3 W' z. M# i$ q$ A, D
在线转换这里有:http://www.araaa.com/zhanzhang/# U" u8 n! J2 K( d7 y: W
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|第一站论坛 ( 蜀ICP备06004864号-6 )

GMT+8, 2024-5-4 04:41 , Processed in 0.117867 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表