nginx应对高并发的手段采用集群方法,如果一个服务域名背后的某个服务器发生了宕机,而此时又恰好轮询到了该服务器,那么就会发生长时间的等待,直到浏览器多次尝试后轮询到没有宕机的服务器才能完成一个服务,大大降低了服务器的效率和用户体验度,即相当于宕机的服务器白白占用了几次轮询尝试时间;
为了解决该问题,案例如下:
修改nginx.conf文件:
upstream myserver{
#ip_hash;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server{
listen 81;
server_name www.bproject.com;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
proxy_connect_timeout 1;
proxy_send_timeout 1;
proxy_read_timeout 1;
}
}
通过一个服务名称的location里面配置代理响应超时时间,1表示1秒钟,如果1秒钟没有响应,就把请求按照轮询转发,加快响应处理的时间。
proxy_connect_timeout:该指令设置与upstream server的连接超时时间,这个超时时间不能超过75秒;
proxy_send_timeout:这个指令设置了发送请求给upstream服务器的超时时间。超时设置不是为了整个发送期间,而是在两次write操作期间。如果超时后,upstream没有收到新的数据,nginx会关闭连接,默认值为60s;
proxy_read_timeout:该指令与代理服务器的读取超时时间。它决定了nginx会等待多长时间来获得请求的响应,这个时间不是获得整个response的时间,而是两次reading操作的时间,默认值为60s;
测试:
步骤一:配置两个Tomcat,两个端口分别为8081,8082
步骤二:配置nginx.conf文件
步骤三:分别启动Tomcat和nginx
启动Tomcat:这里需要启动两次Tomcat,一次端口为8082,一次端口为8081
进入Tomcat文件下的bin目录
使用【./startup.sh】 命令启动
启动后可使用【ps -ef | grep tomcat 】命令查看当前Tomcat的进程
启动nginx:
进入nginx文件下的sbin目录
使用【./nginx】命令启动nginx
使用【ps -ef | grep nginx】命令查看当前nginx进程
实现效果:在配置中配置了两个服务器,当其中一台服务器宕机之后,就是轮询到下一台服务器;