引言

别问,问就是工作需要。让我把写的一个服务用Nginx负载均衡一下。
正好记录一下。

1. 准备

  1. 确保你的Nginx已经安装完毕,且可以正常使用。如果还没安装,请看这个链接:https://blog.csdn.net/weixin_52799373/article/details/126029809?spm=1001.2014.3001.5502

  2. 准备一个测试服务,改改端口,打三个jar包出来方便测试

  3. 启动三个服务

    试一下看能否访问正常,可以的话继续下一步,不可以的话检测你的jar

2. 修改配置文件

我的配置文件所在地为:/usr/local/nginx/conf/nginx.conf

vim /usr/local/nginx/conf/nginx.conf
  1. 配置upstream,在http{}里 新增 upstream 指向你启动的那三个后端服务。webservers 可以起一个自己容易辨识的名字,这里仅作演示。
upstream webservers{server  192.168.169.130:8081;server  192.168.169.130:8082;server  192.168.169.130:8083;
}


2. 在 server{} 里添加一个location,并且配置 proxy_pass,(注意不要有同名的 比如已经有一个 location / 了,你再添加重启Nginx就会报错)

location / {#转发到负载服务上proxy_pass http://webservers;
}

默认 location / 可以注释掉,也可以在上面修改,我是直接注销掉的。
这里的 webservers 要和你配置 upstream 时起的名字一样。

3. 完整配置文件如下


#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;pid        /usr/local/nginx/logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;upstream webservers{server  192.168.169.130:8081;server  192.168.169.130:8082;server  192.168.169.130:8083;}server {listen       9600;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;# location / {#root   html;#index  index.html index.htm;#}location / {#转发到负载服务上proxy_pass http://webservers;}# location /test/api2 {#     #转发到负载服务上#     proxy_pass http://webservers;# }#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}}
  1. 修改完成后重启Nginx或重新加载配置
# 重新加载(要到Nginx安装目录执行)
./nginx -s reload
# 重新启动服务 (如果你添加了服务)
systemctl restart nginx.service
  1. 浏览器访问:localhost:9600(我监听的9600,如果你没修改应该是默认80,在listen处修改),多访问几次,你会发现是轮训的(你的三个服务返回的结果记得有点区别)


3. 负载均衡配置说明(借鉴)

默认情况下,直接按照上面的配置后,如果后端有多个服务,采用的是轮询策略;

常用的可选配置包括:

weight 多台机器,可以配置权重值,权重高的服务将会优先被访问
down 某个服务配置down之后,这台服务将不会被访问
backup 配置了这个参数后,除非其他的服务都挂掉了,否则这台服务将不会被访问到

以weight 为例做简单的说明,在上面的配置中,补充weight参数

upstream webservers{server  192.168.9.134:8081 weight=8;server  192.168.9.134:8082 weight=2;}

重新加载配置,按照上面的测试步骤再次刷新页面,这时候可以发现,8081对于的这个服务将会被更多的访问到;

其他负载均衡配置策略

默认情况下,nginx采用的是轮询策略,nginx还提供了其他几种常用的负载均衡配置

1、ip_hash

每个请求按访问IP的hash结果进行分配,这样每个访客就可以固定访问一个后端服务,一定程度上可以解决session问题;

upstream webservers {<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E--> ip_hash; server 192.168.169.130:8081; server 192.168.169.130:8082; server 192.168.169.130:8083;}

2、weight

weight代表权重,默认为1,权重越高,被分配的客户端请求就会越多

upstream webservers{server  192.168.9.134:8081 weight=8;server  192.168.9.134:8082 weight=2;}

3、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的将会被优先分配

upstream webservers{server 192.168.9.134:8081;server 192.168.9.134:8082;fair;
}

4、url_hash

按访问URL的hash结果分配。这样相同的url会被分配到同一个节点,主要为了提高缓存命中率。比如,为了提高访问性能,服务端有大量数据或者资源文件需要被缓存。使用这种策略,可以节省缓存空间,提高缓存命中率

upstream webservers{hash &request_uri;server 192.168.9.134:8081;server 192.168.9.134:8082;
}

5、least_conn

按节点连接数分配,把请求优先分配给连接数少的节点。该策略主要为了解决,各个节点请求处理时间长短不一造成某些节点超负荷的情况。

upstream webservers{least_conn;server 192.168.9.134:8081;server 192.168.9.134:8082;
}

以上不同的负载均衡策略均有各自不同的使用场景,请结合自身的实际情况进行合理的选择,同时,各自配置策略在实际使用的时候也不是孤立的,比如最小连接数可以搭配权重数一起使用。

Nginx负载均衡配置教程-Linux相关推荐

  1. Nginx负载均衡配置和健康检查

    Nginx负载均衡配置和健康检查 注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. nginx的强大之处不必要我细说,当初第一次接触ngin ...

  2. nginx负载均衡配置-windows

    http://www.2cto.com/os/201302/191589.html nginx负载均衡配置-windows 虽然说windows上的nginx在官方文档中提到"仅作为测试&q ...

  3. Nginx负载均衡配置实例

    五.Nginx负载均衡配置实例 实现效果:访问 www.123.com/edu/a.html的时候,将请求平均分配到8080和8081端口. 准备工作: 1)准备两台Tomcat服务器(端口号为808 ...

  4. 超详细Linux -- nginx负载均衡配置

    Nginx 负载均衡应用配置 Nginx实现负载均衡的方式 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,后端服务器宕机时,能被自动删除,且请求不会受影响. 2.weight权重 指 ...

  5. NGINX负载均衡配置解析

    课程目标 掌握什么是负载均衡及负载均衡的作用和意义. 了解lvs负载均衡的三种模式. 了解lvs-DR负载均衡部署方法. 掌握nginx实现负载均衡的方法. 掌握lvs+nginx负载均衡拓扑结构. ...

  6. Nginx负载均衡配置实例详解

    负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦. 负载均衡 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可 ...

  7. Nginx负载均衡配置实例详解(转)

    | 时间:2013-09-05 20:19:17 | 阅读数:810738 [导读] 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的 ...

  8. Tomcat集群快速入门:Nginx负载均衡配置,常用策略,场景及特点

    Nginx负载均衡的配置,常用策略,场景,以及特点,放到这里是需要更细化的讲解,毕竟一期还没有做集群,而我们这一期做集群的时候,很多点要单独拿出来深入讲解,第一个轮询,默认的一个配置,简单也好理解,第 ...

  9. Nginx 负载均衡 配置全过程

    Nginx平台搭建:Nginx+mysql+php-fpm搭建高性能Nginx平台 前端Nginx:192.168.93.137 后端web1:192.168.93.138 后端web2:192.16 ...

最新文章

  1. 新手教程:用.htaccess实现二级域名功能
  2. EqualLogic 6100 V6 Synchronous Replication
  3. 开发好还是实施好_公众号开发 选择模板好还是选择定制发好
  4. 使用gdbserver远程调试
  5. RavenDb学习(十)附件,存储大对象
  6. MetaException(message:Hive Schema version 3.0.0 does not match metastore's schema version 1.2.0 Meta
  7. [洪流学堂]Hololens开发高级篇2:手势(Gesture)
  8. 1.spring入门 - spring实战第五版
  9. 物无定味适口者珍,Python3并发场景(CPU密集/IO密集)任务的并发方式的场景抉择(多线程threading/多进程multiprocessing/协程asyncio)
  10. 使用Dreamweaver进行一个简单的图文混排1/HTML
  11. linux写makefile用tab报错,隐含规则 - linux makefile教程
  12. Exploratory Social Network Analysis with Pajek(第三版)11
  13. Iterator的使用
  14. 【HCNP-OSPF】LSA
  15. 【企业】如何将零和博弈转换为正和博弈
  16. 51单片机ADC0832模数转换+ LCD1602显示+Proteus仿真
  17. 自己写php木马,自己写的php木马webshell扫描器
  18. 基于Unity的软光栅实现(3):基于Job system的多核加速光栅化
  19. 《财富》推荐的75本必读书
  20. 惠普刀片服务器c7000硬件配置手册_HP C7000刀笼初始安装配置指南

热门文章

  1. 京东API item_search_img - 拍立淘搜索淘宝商品
  2. oracle esr st,Oracle推出Solaris 11.4 SRU18,缓解SWAPGS漏洞
  3. mysql查球队胜场和败场sql_NBA 史上实力最弱的球队是哪个?用 Python + SQL 我们找到了答案...
  4. UI设计师未来职业发展前景大揭秘
  5. 使用nginx解决一台服务器中ws协议与wss协议共存问题 2017-07-09 13:29:06
  6. 同步亚马逊产品广告(SP)业务数据
  7. 根据条件从txt文件中挑出一些文字并据此修改文件名字
  8. android添加图片按钮,如何给Android中的按钮添加图片功能
  9. 深入探索透视投影变换
  10. 首先的亚当和末后的亚当_亚当–实时短片动画