nginx作用:
反向代理
负载均衡
http服务器(包含动静分离)
邮件服务器
反向代理(reverse proxy)
代理服务器接受来自网络的请求,并将此请求转发给网络内部的服务器,内部服务器处理完将结果通过代理服务器返回给客户端,所以此代理服务器对外表现为反向代理服务器
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
}
}
当在浏览器中输入localhost的时候就相当于访问了http:// localhost:8080
负载均衡
负载均衡是nginx使用频率较高的用途之一,当有2台或2台以上的服务器,nginx通过规则选择将请求分发到某台服务器上,一般nginx做负载均衡会结合反向代理使用,目前支持3中负载均衡的策略
第一种:RR(默认)
按照请求时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,自动剔除
upstream test {
server localhost:8080;
server localhost:8081;
}
server {
listen 81;
server_name localhost;
client_max_body_size 1024M;
location / {
proxy_pass http://test;
proxy_set_header Host $host:$server_port;
}
}
upstream test {
server localhost:8080;
server localhost:8081;
}
http://localhost 的时候,也不会有问题,会默认跳转到 http://localhost:8080 具体是因为Nginx会自动判断服务器的状态,如果服务器处于不能访问(服务器挂了),就不会跳转到这台服务器,所以也避免了一台服务器挂了影响使用的情况,由于Nginx默认是RR策略,所以我们不需要其他更多的设置。
第二种:权重 (weight)
指定轮询机制,权重和轮询几率是成正比的
pstream test {
server localhost:8080 weight=9;
server localhost:8081 weight=1;
}
如果有10次请求,8081这个端口,会被访问9次,8080端口会被访问1次
第三种:ip_hash
上面两种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}
第四种:fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
fair;
server localhost:8080;
server localhost:8081;
}
第五种:url_hash
按照访问路径url的hash结果,使每个url定向到同一个同一个后台服务器,后端服务器一般为缓存服务器会比较有效
upstream backend {
hash $request_uri;
hash_method crc32;
server localhost:8080;
server localhost:8081;
}
注意:fair和url_hash需要安装第三方模块才能使用,
nginx+tomcat实现负载均衡(以nginx在window环境为例)
准备好两个tomcat
这里都是用的本地的tomcat,只是修改了端口
nginx的配置:
到nginx.conf下配置
启动nginx.exe
当用户在浏览器输入http://localhost/test/index.jsp时nginx会拦截请求利用反向代理找到test然后将请求转发给localhost:8080或者localhost:8088,这样页面就能正常显示了 test是我的项目名