一、关于nginx
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
主要用途(包含但不仅限于):
- Http静态资源服务器
存储静态资源,如图片文件等。 - 负载均衡
如果一台服务器不能承受并发访问压力时,我们可以新增一个服务,其中用nginx可以实现一个入口访问,然后根据nginx的分发策略将全部访问请求分发到不同的服务器上,分散访问压力,使得服务正常运行。 - 反向代理
隐藏后端资源服务器信息,与正向代理相反。流程就是客户端发起请求到nginx,nginx经过查询配置,获取到后端真正服务器地址,请求后端服务,然后返回数据给客户端。
二、反向代理
那么怎样用nginx来实现一个反向代理服务器呢?
首先启动一个tomcat服务器,用它来模拟后台服务。
配置文件为conf/server.xml。
我们不想让外界知道后台服务的地址,那么我们就需要配置nginx方向代理。
配置文件为conf/nginx.conf
删除默认的server配置:
添加新的server配置:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host:$server_port;
}
}
此配置意为监听localhost:80/,并将这上面的所有请求代理到localhost:8080服务。
启动nginx:
点击双击nginx.exe,黑窗口一闪而过
那怎样查看是否启动成功呢?
打开任务管理器查看是否有两个nginx进程:
其中一个是nginx的守护进程。
当然也可以通过命令行来查看:
tasklist | findstr nginx
特别需要注意的是,nginx的位置不能是中文文件夹下否则会报错。
错误日志可以在logs/error.log中查看:
浏览器访问80端口:
成功实现反向代理。
三、负载均衡
nginx中,有多种负载均衡策略
-
轮询
在服务列表中根据时间将请求依次分配到服务器。 -
权重
根据重要程度分配,权重值越大,转发到这台服务器的请求就会越多。 -
IP Hash
根据客户端的ip进行hash算法,使得某ip访问的一直是固定的某台服务器,这样可以解决session的问题。 -
Url Hash
需要安装第三方模块,根据url进行hash算法,使得某url对应的一直是固定的某台服务器。 -
Fair
需要安装第三方模块,按照后端服务响应时间来分配,响应时间短的优先分配。我们主要来介绍一下轮询、权重、IP Hash这三种nginx自身能做的策略。
1.1启动两个tomcat服务
刚刚我们已经启动了一个8080服务,现在将tomcat包复制一份
并修改其中的/conf/server.xml:
将shutdown端口由8005改为8006:
将http端口由8080改为8081:
将ajp端口由8009改为8010:
分别在两个tomcat的/webapps/ROOT/index.jsp中添加标识:
启动8081服务:
1.2轮询
nginx配置:
upstream local_server{
server localhost:8080;
server localhost:8081;
}
local_server使我们自己起的名字,server表示可用的后台服务。
在nginx.exe所在目录打开命令行,执行重启命令:
nginx -s reload
重新访问localhost,会看到在两个服务之间来回切换:
1.3权重
nginx配置
upstream local_server{
server localhost:8080 weight=8;
server localhost:8081 weight=2;
}
重启nginx,并在页面访问localhost,发现8080页面出现频率要比8081高得多。
1.4IP Hash
nginx配置:
upstream local_server{
ip_hash;
server localhost:8080;
server localhost:8081;
}
测试方式同上。