nginx实现负载均衡
一 负载均衡的步骤
准备两个或多个tomcat服务器,本地或者远程均可。
如果是本地的话,需要设置两个tomcat的端口不一致。包括启动端口,关闭端口,jvm端口。
分别为:
<Server port="8005" shutdown="SHUTDOWN"> //关闭端口 <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> //启动端口 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />//调用jvm的端口
我把两个服务器的启动端口分别改为8080,8081.
开始负载均衡的配置:
在nginx的配置文件中要进行一下几点的配置:
- 设置负载服务器的地址,即两个tomcat的地址
upstream dc{ ip_hash; #不加的话会一直存不上session,导致登陆一直超时,加上了权重轮询就无效了, #这是ip哈希算法根据访问ip进行计算后分的的服务,会一直是这个服务器,例如本机的ip, #经计算后与8080端口契合,所以一直访问这个端口。除非他挂了, #然后会经过proxy_connect_timeout时间后进行下一个可用服务的访问。 server 127.0.0.1:8081 weight=2; server 127.0.0.1:8080 weight=1; }
此处坑很多~~
NO.1 ip_hash是负载均衡的一种请求分配的方式,通过计算请求的ip,即本机ip,来给该访客指定一个服务地址,这样一个ip就被指定到一个tomcat的地址。用来解决多服务器之间session不通,导致轮询访问的话会话丢失的问题。如果不加的话,恰巧项目又用到了session,就会连登陆都无法使用。
NO.2 加上了这个之后,权重轮询就无效了,毕竟是两个不同的算法。
配置反向代理:
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://dc; #此处就是upstream的名字 proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 #root html; #index index.html index.htm; } #本地动静分离反向代理配置,所有jsp的页面均交由tomcat或resin处理 location ~ .(jsp|jspx|do)?$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://dc; } ##所有静态文件由nginx直接读取不经过tomcat或resin location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { expires 15d; #15天过期 } location ~ .*.(js|css)?$ { expires 1h; } location ~ ^/(images|javascript|js|css|flash|media|static)/ { #过期30天,静态文件不怎么更新,过期可以设大一点, #如果频繁更新,则可以设置得小一点。 expires 30d; }
proxy_connect_timeout 5s; //若当前请求的服务挂掉,等待5s转向其他可用服务
配置完成,如何访问:
前面server节点定义的server_name和port就规定了我们的代理地址:http://localhost:80
想访问项目在后面 加项目名即可。
如果不想加项目名,参考链接:https://www.cnblogs.com/langtianya/p/5743357.html
二 nginx的常用配置
参考连接:https://blog.csdn.net/happydream_c/article/details/54943802