nginx通过hmux协议访问resin--说明文档

    技术2022-05-20  37

    这里讲述一下在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、这里书写的文档由于是从项目中提炼出来的,如果有什么不明白的或者 错误的地方,请提出来,我们团队会尽快解决这些问题的。


    最新回复(0)