nginx介绍
nginx (“engine x”) 是俄罗斯人Igor Sysoev(塞索耶夫)编写的一款高性能的 HTTP 和反向代理服务器。也是一个IMAP/POP3/SMTP代理服务器;也就是说,Nginx本身就可以托管网站,进行HTTP服务处理,也可以作为反向代理服务器使用。
nginx特点
跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本;
配置异常简单,非常容易上手。配置风格跟程序开发一样,神一般的配置;
非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数.(这得益于Nginx使用了最新的epoll模型);
事件驱动:通信机制采用epoll模型,支持更大的并发连接;
master/worker结构:一个master进程,生成一个或多个worker进程;
内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M);
成本低廉:Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币;
内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问;
节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头;
稳定性高:用于反向代理,宕机的概率微乎其微。
配置异常简单,非常容易上手。配置风格跟程序开发一样,神一般的配置;
非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数.(这得益于Nginx使用了最新的epoll模型);
事件驱动:通信机制采用epoll模型,支持更大的并发连接;
master/worker结构:一个master进程,生成一个或多个worker进程;
内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M);
成本低廉:Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币;
内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问;
节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头;
稳定性高:用于反向代理,宕机的概率微乎其微。
搭建nginx + tomcat + Java负载均衡环境环境
我们下载好nginx服务器和tomcat服务器,nginx下载地址为:http://nginx.org/en/download.html,tomcat地址地址为:http://tomcat.apache.org/。
在D盘创建我们搭建环境的目录,如下所示:
我们修改tomcat-1的端口为8082,修改tomcat-2的端口为8083,然后我们配置nginx的nginx.conf,配置如下:
#user nobody;
worker_processes 1;#工作进程的个数,可以配置多个
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;#单个进程最大连接数(最大连接数=连接数*进程数)
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream;#默认文件类型
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65; #长连接超时时间,单位是秒
gzip on;#启用Gizp压缩
#服务器的集群
upstream quwenzhe { #服务器集群名字
#server 172.16.21.13:8081 weight=1;#服务器配置 weight是权重的意思,权重越大,分配的概率越大。
#server 192.168.1.186:8081 weight=1;
#server 172.16.1.14:8081 weight=2;
#server 172.16.1.15:8081 weight=1;
#server 172.16.1.15:80 weight=1;
server 127.0.0.1:8082 weight=1;
server 127.0.0.1:8083 weight=1;
}
#当前的Nginx的配置
server {
listen 8081;#监听80端口,可以改成其他端口
server_name quwenzhe;############## 当前服务的域名
location / {
index index.html index.jsp;
proxy_pass http://quwenzhe;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 100m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
我们需要注意的是server_name名称必须和upstream名称一致,proxy_pass名称为http://+server_name。upstream配置的是tomcat服务器列表,weight是权重的意思,权重越大,分配的概率越大。接着,我们创建一个简单的java web项目nginx01,在项目中创建一个index.jsp页面,在页面中添加内容“第一个测试页面”,将其部署到tomcat-1;将index.jsp页面中的内容改为“第二个测试页面”,将其部署到tomcat-2。
启动tomcat-1,启动tomcat-2,用命令行切换到nginx
服务器的目录,输入start nginx启动nginx服务器。
在浏览器输入 http://localhost:8082/nginx01/index.jsp,tomcat-1可以正常访问,输入http://localhost:8083/nginx01/index.jsp,tomcat-2可以正常访问,输入 http://localhost:8081/nginx01/index.jsp,通过不断刷新页面,我们可以发现内容时而为“第一个测试页面”,时而为“第二个测试页面”,证明nginx成功实现请求的负载均衡。
配置成功的服务器下载地址:http://pan.baidu.com/s/1eQHdDTK。
不过有个疑问,当把tomcat服务器其中的一个关掉后,再次访问nginx服务器,发现服务器响应速度很慢,这个问题还有待解决。