注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

伟博

我的地盘听我的

 
 
 

日志

 
 

Nginx安装url_hash插件  

2011-10-13 14:40:43|  分类: nginx |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Nginx安装url_hash插件



---------------------
ID:gjw_apparitor
---------------------

简介:

******************************
url_hash
nginx的第三方模块,nginx本身不支持,需要打patch .

Url_hash nginx在做负载均衡的时候。把转发的URL hash的形式保存。这样可以保证同一个URL始终

分给同一个real server,来提高访问速度。

为了确保能在 Nginx 中使用正则表达式进行更灵活的配置,安装之前需要确定系统是否安装有 PCREPerl Compatible Regular Expressions)包。您可以到 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 下载最新的 PCRE 源码包,使用下面命令下载编译和安装 PCRE 包:


软件列表:
******************************

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.7.tar.gz

wget http://sysoev.ru/nginx/nginx-0.7.57.tar.gz

wget http://wiki.nginx.org/images/7/78/Nginx_upstream_hash-0.3.tar.gz

******************************

1、下载软件



[gjw@apparitor]# cd /software/nginx/
[gjw@apparitor]# wget http://wiki.nginx.org/images/7/78/Nginx_upstream_hash-0.3.tar.gz
[gjw@apparitor]# tar zxvf Nginx_upstream_hash-0.3.tar.gz
[gjw@apparitor]# wget http://sysoev.ru/nginx/nginx-0.7.57.tar.gz
[gjw@apparitor]# tar zxvf nginx-0.7.57.tar.gz
[gjw@apparitor]# useradd nginx



2、给nginx url_hash补丁。


[gjw@apparitor]# cat nginx_upstream_hash-0.3/nginx.patch
diff -Naur src/http/ngx_http_upstream.h src-hash/http/ngx_http_upstream.h

--- src/http/ngx_http_upstream.h    2008-03-03 12:04:06.000000000 -0800

+++ src-hash/http/ngx_http_upstream.h    2008-06-07 13:01:37.000000000 -0700

@@ -90,6 +90,10 @@



     ngx_array_t                    *servers;   /* ngx_http_upstream_server_t */

+    ngx_array_t                    *values;
+    ngx_array_t                    *lengths;
+    ngx_uint_t                      retries;
+
     ngx_uint_t                      flags;
     ngx_str_t                       host;
     u_char                         *file_name;




[gjw@apparitor]# vi nginx-0.7.57/src/http/ngx_http_upstream.h
struct ngx_http_upstream_srv_conf_s {
    ngx_http_upstream_peer_t         peer;
    void                           **srv_conf;
    ngx_array_t                     *servers; /* ngx_http_upstream_server_t */
    ngx_uint_t                       flags;
    ngx_str_t                        host;
    u_char                          *file_name;
    ngx_uint_t                       line;
    in_port_t                        port;
    in_port_t                        default_port;
};   

改为: 红色是改变的部分
struct ngx_http_upstream_srv_conf_s {
    ngx_http_upstream_peer_t         peer;
    void                           **srv_conf;
    ngx_array_t                     *servers; /* ngx_http_upstream_server_t */

   ngx_array_t                    *values;
    ngx_array_t                    *lengths;
    ngx_uint_t                     retries;


    ngx_uint_t                       flags;
    ngx_str_t                        host;
    u_char                          *file_name;
    ngx_uint_t                       line;
    in_port_t                        port;
    in_port_t                        default_port;
};

3、编译:nginx
[gjw@apparitor]# cd nginx-0.7.57
./configure --user=nginx \
--group=nginx \
--prefix=/webserver/nginx \
--with-http_stub_status_module \      #启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态。
--with-http_ssl_module \                  
--without-http_rewrite_module \       #启用rewrite模块
--add-module=/software/nginx/nginx_upstream_hash-0.3    #url_hash模块的路径
[gjw@apparitor]# make
[gjw@apparitor]# make install      

4、编写nginx配置文件
[gjw@apparitor]# vi /webserver/nginx/conf/nginx.conf
user nginx nginx;
worker_processes 10;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid        logs/nginx.pid;
worker_rlimit_nofile 51200;          #最大文件描述符
events
{
      use epoll;
      worker_connections 51200;
}

http
{
      include       mime.types;
      default_type application/octet-stream;
      keepalive_timeout 120;
      tcp_nodelay on;

      upstream www.gjw.com {
              server   10.10.11.121:80;        #这个是2台squid的机器
              server   10.10.11.122:80;
            hash $request_uri;                 #这个就是启用url_hash 功能
      }

      server
      {
              listen 80;
              server_name www.gjw.com;

              location / {
                       proxy_pass        http://www.gjw.com;
                       proxy_set_header   Host             $host;
                       proxy_set_header   X-Real-IP        $remote_addr;
                       proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
              }

              log_format www_gjw_com '$remote_addr - $remote_user [$time_local] $request '
                                '"$status" $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"';
              access_log /data1/logs/www.log www_gjw_com;

       location /nginx_status {
                      stub_status on;                                #这个是观察nginx情况的配置。
                   access_log   off;
                }
   }
}      

启动nginx服务
[gjw@apparitor]# /webserver/nginx/sbin/nginx

3、测试:
找一台机器,在hosts里绑定IP地址,10.10.10.123为nginx的的IP。
vi /etc/hosts
10.10.11.123 www.gjw.com
找几个URL 测试一下,你会发现同一个url 都会解析到同一台机器上。

缺点:
    我把其中一台squid 宕掉,原来分给他的URL 还是会找这台机器,造成503。

来自: http://hi.baidu.com/apparitor/blog/item/faf07a457298098bb2b7dc81.html
  评论这张
 
阅读(2353)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018