最近不是很忙,用零碎时间做点小小的实验。
以前公司采用F5负载均衡交换机,F5将请求转发给多台服务器,每台服务器有多个webserver实例,每个webserver分布在多台服务器,交叉式的分布集群。F5只是简单了解,毕竟那玩意几十万的价格实在不是我一个小喽喽能弄来做试验玩的,而起公司也不能开放权限。后来知道apache、Nginx软件可以实现负载(F5是操作于IOS网络模型的传输层,Nginx、apache是基于http反向代理方式,位于ISO模型的第七层应用层。直白些就是TCP UDP 和http协议的区别,Nginx不能为基于TCP协议的应用提供负载均衡。)
现在对window下对Nginx+tomcat负载均衡做配置尝试,将全部请求转发到tomcat,并未做静态,动态分开,图片防盗链等配置,一切先简单来,后续慢慢添加完善。
用到软件:
Nginx ,两个tomcat ,eclipse肯定要有了,web项目自备,其他无。
1、下载nginx
2、目录结构
Nginx-
|_ conf 配置目录
|_ contrib
|_ docs 文档目录
|_ logs 日志目录
|_ temp 临时文件目录
|_ html 静态页面目录
|_ nginx.exe 主程序
window下安装Nginx极其简单,解压缩到一个无空格的英文目录即可(个人习惯,担心中文出问题),双击nginx启动,这里我安装到:D:\server目录,下面涉及到的tomcat也安装在此目录。
nginx启动:到目录下执行nginx
nginx停止:nginx -s stop
3、下载两个版本的tomcat6。
下面就是关键的配置问题了。
Nginx配置文件默认在conf目录,主要配置文件为nginx.conf,我们安装在D:\server\nginx-1.6.2、默认主配置文件为D:\server\nginx-1.6.2\nginx.conf。下面是nginx作为前端反向代理服务器的配置
nginx.conf
1 #Nginx所用用户和组 2 #user niumd niumd; 3 4 #工作的子进程数量(通常等于CPU数量或者2倍于CPU) 5 worker_processes 2; 6 7 #错误日志存放路径 8 #error_log logs/error.log; 9 #error_log logs/error.log notice; 10 error_log logs/error.log info; 11 12 #指定pid存放文件 13 pid logs/nginx.pid; 14 15 events { 16 #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue 17 #use epoll; 18 19 #允许最大连接数 20 worker_connections 2048; 21 } 22 23 http { 24 include mime.types; 25 default_type application/octet-stream; 26 27 #定义日志格式 28 #log_format main ‘$remote_addr - $remote_user [$time_local] $request ‘ 29 # ‘"$status" $body_bytes_sent "$http_referer" ‘ 30 # ‘"$http_user_agent" "$http_x_forwarded_for"‘; 31 32 #access_log off; 33 access_log logs/access.log; 34 35 client_header_timeout 3m; 36 client_body_timeout 3m; 37 send_timeout 3m; 38 39 client_header_buffer_size 1k; 40 large_client_header_buffers 4 4k; 41 42 sendfile on; 43 tcp_nopush on; 44 tcp_nodelay on; 45 46 #keepalive_timeout 75 20; 47 48 include gzip.conf; 49 upstream localhost { 50 #ip_hash 51 #ip_hash; 52 server localhost:8081; 53 server localhost:8080; 54 } 55 56 server { 57 listen 80; 58 server_name localhost; 59 60 location / { 61 proxy_connect_timeout 3; 62 proxy_send_timeout 30; 63 proxy_read_timeout 30; 64 proxy_pass http://localhost; 65 } 66 67 } 68 }
gzip压缩相关配置如下:
gzip on; gzip_min_length 1000; gzip_types text/plain text/css application/x-javascript;
下面为tomcat的配置,这个大家应该很熟悉了
我这里有两个tomcat6,分别为apache-tomcat-6.0.37-8081和tomcat-6.0.18-8080,意思很明白一个用8081端口一个用8080端口,修改server.xml配置文件即可,端口修改这里不提。
启动两个tomcat成功后。检验效果的时候到了。
浏览器输入:http://localhost/user/test.do这是我自己项目的链接,查看连个服务的后台日志是否有打印,结果OK一切顺利。
期间顺带解决问题:去掉url中项目名称的问题。解决方法在server.xml加如下代码,path属性不填,正常情况为项目名,docBase为发布的地址,可以不再tomcat目录下大家随意。
<Context docBase="D:\server\apache-tomcat-6.0.37-8081\wtpwebapps\项目名" path="" reloadable="true" source="org.eclipse.jst.jee.server:mySpring"/></Host>