前言
Nginx做的代理后面SpringBoot的项目,1N3T的架构,Tomcat的配置也进行了相应的调优。
配置
这里主要来简单的说下Nginx的端口负载均衡,具体的大家可以参考
Nginx文档 | Nginx 烹调书(Nginx Cookbook 中文版) | Nginx文档
upstream是nignx分配方式,默认是轮询
1. 轮询: 轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,若某个后端服务器挂了,会自动剔除。 2. weight: 按着权重的大小进行轮询。 3. ip_hash: 每个请求按照访问ip的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。 4. fair: 可以根据页面大小、加载时间长短智能的进行负载均衡,响应时间短的后端服务器优先分配请求。 5. url_hash: 与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。 6. least_conn: 把请求转发给连接数较少的后端服务器
轮询
max_fails=2 fail_timeout=30s 代表在30秒内请求某一应用失败2次,认为该应用宕机,等待30秒再次请求 upstream bakend { server 192.168.10.1:6001 weight=10 max_fails=2 fail_timeout=30s; server 192.168.10.1:51001 weight=10 max_fails=2 fail_timeout=30s; server 192.168.10.1:6005 weight=10 max_fails=2 fail_timeout=30s; server 192.168.10.1:6004 weight=10 max_fails=2 fail_timeout=30s; }
ip_hash
upstream bakend { ip_hash; server 192.168.10.1:6001 weight=10 max_fails=2 fail_timeout=30s; server 192.168.10.1:51001 weight=10 max_fails=2 fail_timeout=30s; server 192.168.10.1:6005 weight=10 max_fails=2 fail_timeout=30s; server 192.168.10.1:6004 weight=10 max_fails=2 fail_timeout=30s; }
完整配置
我这边是虚拟主机的,所以直接配置对应的虚拟主机的配置就好了,完整配置如下
# 负载的地址池 upstream bakend { ip_hash; server 192.168.10.1:6001 weight=10 max_fails=2 fail_timeout=30s; server 192.168.10.1:51001 weight=10 max_fails=2 fail_timeout=30s; server 192.168.10.1:6005 weight=10 max_fails=2 fail_timeout=30s; server 192.168.10.1:6004 weight=10 max_fails=2 fail_timeout=30s; } server { listen 80; listen 443 ssl; server_name app.xxxx.net; index index.html index.htm index.php default.html default.htm default.php; underscores_in_headers on; root /usr/local/nginx/conf/html; ssl_certificate /cert/app.xxxx.net.pem; ssl_certificate_key /cert/app.xxxx.net.key; ssl_session_timeout 5m; ssl_ciphers xxxxxxxxxxxxxxxx; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_set_header Host $host:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header x-forwarded-for $remote_addr; #地址池名称bakend proxy_pass http://bakend; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { #地址池名称bakend proxy_pass http://bakend; expires 30d; } location ~ .*\.(js|css)?$ { #地址池名称bakend proxy_pass http://bakend; expires 12h; } access_log /home/wwwlogs/app.xxxx.net.log; }
Nginx端口负载均衡就是这么的简单~