这里讲述一下在nginx-0.8.53版本下使用本模块的具体安装方法(linux) 一、安装准备 1、下载nginx-0.8.53; 2、下载ngx_hmux_module_vx.x.tar包 (http://code.google.com/p/nginx-hmux-module/downloads/list); 这里供下载的版本是初步版本,以后会随着需求不断增强其功能。 ngx_hmux_module.c文件的实现参考了姚伟斌写的nginx_ajp_module模块,具体功能就是实现hmux协议,并把处理过程异步化。 hmux协议可以参考文档 http://www.caucho.com/resin-4.0-javadoc/com/caucho/server/hmux/HmuxRequest.html 3、(可选) 如果nginx与resin之间需要保持keepalive,且版本低于1.1.4请下载keepalive模块( http://mdounin.ru/hg/ngx_http_upstream_keepalive ),并参考http://trac.nginx.org/nginx/changeset/4116/nginx打好补丁; 如果需要session sticky,请下载ngx_http_upstream_jvm_route_module.c文件( http://yaoweibin.cn/ )。 4、为了实现过程异步,需要修改src/event/ngx_event_pipe.c文件 原来代码如下: while (cl && n > 0) { ngx_event_pipe_remove_shadow_links(cl->buf); size = cl->buf->end - cl->buf->last; if (n >= size) { cl->buf->last = cl->buf->end; /* STUB * / cl->buf->num = p->num++; if (p->input_filter(p, cl->buf) == NGX_ERROR){ return NGX_ABORT; } n -= size; ln = cl; cl = cl->next; ngx_free_chain(p->pool, ln); } else { cl->buf->last += n; n = 0; } } 修改如下: while (cl && n > 0) { ngx_event_pipe_remove_shadow_links(cl->buf); size = cl->buf->end - cl->buf->last; if (n >= size) { cl->buf->last = cl->buf->end; n -= size; } else { cl->buf->last += n; n = 0; } /* STUB */cl->buf->num = p->num++; if (p->input_filter(p, cl->buf) == NGX_ERROR) { return NGX_ABORT; } ln = cl; cl = cl->next; ngx_free_chain(p->pool, ln); } 这样修改的目的就是为了让nginx及时返回信息给客户端,否则很长时间才能返回给客户端。 上述修改参考了Maxim Dounin和姚伟斌的做法。 上述也可以采用补丁的方式修改,参加下载包里面的hmux.patch和README.txt文件。 二、安装步骤 以下是加上keepalive功能的安装步骤: 1、./configure --add-module=hmux/ --add-module=keepalive/ --with-debug 2、修改objs/Makefile,去掉优化参数(调试目的) 3、make 4、make install 5、修改nginx.conf配置文件如下: user xxx; worker_processes 2; debug_points abort; error_log logs/error.log debug; pid logs/nginx.pid; worker_rlimit_nofile 65536; events { use epoll; epoll_events 4096; worker_connections 8192; accept_mutex off; } http { include mime.types; default_type application/octet-stream; access_log logs/access.log; sendfile on; tcp_nopush on; client_header_timeout 5; send_timeout 5; keepalive_timeout 10; server_name_in_redirect off; server_tokens off; charset GB2312; upstream resins{ server xxx.xxx.xxx.xxx:6800; keepalive 1024; } server { listen xxxx; server_name xxx.xxx.com; location / { hmux_pass resins; } } } 三、注意 这里需要注意的几点就是: 1、一定要修改nginx源代码或者打补丁 2、在单进程模式下,keepalive模块是没有问题的,但是在多进程模式下, 按照keepalive模块内说明可能会有问题。根据我近一年使用keepalive的经验 和源代码分析,在多进程模式下要保持与后端resin的keepalive,最好设 置accept_mutex off(这个会在我以后的文档中具体讲述为什么)。 3、这里书写的文档由于是从项目中提炼出来的,如果有什么不明白的或者 错误的地方,请提出来,我们团队会尽快解决这些问题的。