用nginx做反向代理和缓存并且能让apache服务器得到真实的客户端地址
需求
一个网站,客户主要分布在亚洲其它国家和地区,如日本台湾新加坡马来西亚印度香港等。而服务器放在上海。国外用户访问速度不快。现在需要提高国外用户的访问速度。
最 终定下来的方案,就是在多个国家租用最便宜的vps做反向代理和缓存,通过智能解析把不同国家的访问定位到不通的vps上。这个简单来说就是自己做了个 cdn网络。这个方案里涉及到很多问题。比如各vps的健康检查和故障转移。这里只讨论用nginx做反向代理和缓存的几个问题
环境
1.国外vps一台,运行nginx,做缓存和反向代理
2.国内服务器一台,运行apache,运行一个php+mysql开发的站点
vps上nginx的配置
nginx用nginx-0.7.67.tar.gz
引用
cd /usr/src
wget http://nginx.org/download/nginx-0.7.67.tar.gz
tar xzf nginx-0.7.67.tar.gz
cd nginx-0.7.67
./configure –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_realip_module
make
make install
配置文件的主要部分如下
引用
proxy_temp_path /data/nginx_proxy_temp;
proxy_cache_path /data/nginx_proxy_cache levels=1:2 keys_zone=cache:50m inactive=1d max_size=3000m;
upstream back_end {
server 192.168.0.2:80;
}
server {
listen 80;
server_name www.admin99.net;
location / {
proxy_cache cache;
proxy_cache_valid 200 304 12h;
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://back_end;
expires 1d;
}
location ~ .*\.(php|html)?$
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://back_end;
}
}
apache用的是2.0.63 为了能得到用户的真实ip,在编译好之后,要增加一个模块mod_rpaf
引用
cd /usr/src
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xzf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
/usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
在apache的配置文件中加上一段
引用
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 192.168.0.1
RPAFheader X-Forwarded-For
这样就能看到访问者的真实ip