nginx作反向代理服务器

需求:国外买了两台VPS作国内网站的反向代理,国内网站域名统一指向这台代理服务器,再中转访问回来,这是为了暂时绕过域名备案的需求。国内网站的域名使用自建服务器dns_server解析。 

解决方案:实际上就是用nginx作个http代理服务器;php等动态页面不做缓存,其它的均缓存代理

代理服务器搭建环境:centos5.8 x86_64  nginx0.8.52 

安装略。

主要配置文档nginx/conf.d/xxx.conf

virtual.conf:

  
  
  
  
  1. proxy_cache_path /data/nginx/proxy_cache levels=2:2 keys_zone=content:200m inactive=3d max_size=150000m;    
  2. #设置缓存区名称为content,内存缓存空间大小为200MB,3天没有被访问的内容自动清除,硬盘缓存空间大小为150GB。  
  3.  
  4. server {  
  5.     resolver 222.73.x.x;        #当proxy_pass中包含变量的url时,需进行域名解析,指定自建的DNS服务器地址dns_server_ip,所有这台DNS服务器做过解析的域名都将允许转发。    
  6.     listen       80 default;  
  7.     server_name  _;             #匹配所有,将默认的nginx.conf配置文件中server主机下的servername _;注释掉否则冲突  
  8.  
  9.     access_log  /var/log/nginx/access.log  main;  
  10.       if ($request_method !~ ^(GET|POST|HEAD)$ ) {  
  11.          return 444;  
  12.       }  
  13.         msie_padding on;  
  14.         msie_refresh on;  
  15.    
  16.  
  17.     location / {   #匹配/下所有uri缓存并转发
  18.        proxy_cache content;   
  19.        proxy_cache_valid  200 304 301 302 1d;  
  20.        proxy_cache_valid  any 1m;    
  21.        proxy_cache_key $host$uri$is_args$args;  
  22.  
  23.        proxy_pass http://$http_host$request_uri;   转发url
  24.        proxy_redirect                      off;      
  25.        proxy_set_header   Host             $host;      
  26.        proxy_set_header   X-Real-IP        $remote_addr;      
  27.        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;      
  28.  
  29. #limit  
  30.               if ($userlimit = '100') {  
  31.                   rewrite ^(.*)$ /unlimit$1 last;  
  32.               }  
  33.               limit_conn   myzone  100;  
  34.      access_log  /var/log/nginx/limit_access.log  main;  
  35.  
  36.      }      
  37.  
  38. #unlimit  
  39.     location /unlimit/ {  
  40.        internal;  
  41.        limit_conn   myzone  1000;  
  42.        proxy_cache content;   
  43.        proxy_cache_valid  200 304 301 302 1d;  
  44.        proxy_cache_valid  404 1m;    
  45.        proxy_cache_valid  any 1m;    
  46.        proxy_cache_key $host$uri$is_args$args;  
  47.  
  48.        proxy_pass http://$http_host$request_uri;  
  49.        proxy_redirect                      off;      
  50.        proxy_set_header   Host             $host;      
  51.        proxy_set_header   X-Real-IP        $remote_addr;      
  52.        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;      
  53.  
  54.        access_log  /var/log/nginx/unlimit_access.log  main;  
  55.  
  56.      }      
  57.  
  58.  location ~ /purge(/.*)     #清除缓存设置
  59.  {  
  60.         allow 127.0.0.1;  
  61.         allow 222.73.x.x;  
  62.         allow 222.73.x.0/24;  
  63.         allow 222.73.x.x/27;  
  64.         deny all;  
  65.         proxy_cache_purge  content  $host$1$is_args$args;  
  66.  
  67.     access_log  /var/log/nginx/purge_access.log  main;  
  68.   }  
  69.      
  70.  location ~ .*\.(php|jsp|cgi)?$      #匹配.php,jsp,cgi的动态程序页面不做缓存,直接url转发
  71.  {      
  72.      proxy_set_header Host  $host;      
  73.      proxy_set_header X-Forwarded-For  $remote_addr;      
  74.      proxy_pass http://$http_host$request_uri;  
  75.      access_log  /var/log/nginx/cgi_access.log  main;  
  76.  }      
  77.  
  78. }  

proxy.conf

  
  
  
  
  1. 反向代理参数的全局设置:
  2. client_body_buffer_size  512k;      
  3. proxy_connect_timeout    200;      
  4. proxy_read_timeout       180;      
  5. #proxy_read_timeout       15;      
  6. proxy_send_timeout       5;      
  7. proxy_buffer_size        16k;      
  8. proxy_buffers            4 64k;      
  9.  
  10. proxy_set_header Accept-Encoding 'gzip,deflate';  
  11. #proxy_max_temp_file_size 20m;  
  12. proxy_busy_buffers_size 128k;      
  13. proxy_temp_file_write_size 128k;      
  14.  
  15. proxy_temp_path   /data/nginx/proxy_temp;    

ipclass.conf

  
  
  
  
  1. geo $userlimit {  
  2. default 1;  
  3. #202.107.x.x/27 100;  
  4. #122.224.x.x/32 100;  
  5. }  

测试:

1.dns_server上添加这台反向代理服务器地址的解析

2.本地hosts中添加域名,反向代理服务器地址

123.x.x.x      dns_server上内部域名1

123.x.x.x      dns_server上内部域名2

123.x.x.x      mirrors.163.com                                    #外部网站代理测试

3.查看访问日志路径:

匹配/下所有uri访问日志路径: /var/log/nginx/limit_access.log
匹配php,cgi,jsp动态页面文件访问日志路径. /var/log/nginx/cgi_access.log  
错误日志:/var/log/nginx/error.log

测试结果:
dns_server上内部网站域名测试, 日志查看记录访问正常,
mirrors.163.com  访问502 bad gateway ,日志:
012/11/27 03:23:08 [error] 4679#0: *20 mirrors.163.com could not be resolved (110: Operation timed out), client: 202.107.x.x, server: _, request: "GET / HTTP/1.1", host: "mirrors.163.com" 2012/11/27 03:23:08 [error] 4679#0: unexpected response for mirrors.163.com
..      非dns_server上的内部网站是不能通过此台代理服务器

手动purge清除缓存测试OK:用法,清除的uri前添加purge即可

http://x.x.com/purge/$uri

你可能感兴趣的:(nginx,反向代理)