[转]三、Nginx+Tomcat实现Web服务器的负载均衡

【转载自】http://blog.csdn.net/u010028869/article/details/50485245

拓扑环境

服务器名称 系统版本 预装软件 IP地址
Nginx服务器 CentOS 7 最小安装 Nginx 192.168.22.227
Web服务器A CentOS 7 最小安装 tomcat+jdk 192.168.22.229
Web服务器B CentOS 7 最小安装 tomcat+jdk 192.168.22.230
服务器采用CentOS 7 最小安装模式,完全模拟生成环境,一台Nginx服务器,两台Tomcat服务器,实现一个简化的反向代理和负载均衡服务。

原理图


编写测试静态页

在229服务器编写 Login.html:

  
  
  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html;charset=gb2312" />
  4. </head>
  5. <body>
  6. <h1>您正在访问:192.168.22.229 </h1>
  7. </body>
  8. </html>

在Tomcat的webapps目录下,新建一个文件夹drp,并将login.html放到drp文件夹里。
完整目录:/usr/local/tomcat8/webapps/drp



同样的在230服务器上也新建文件:login.html,并上传到drp目录下。

  
  
  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html;charset=gb2312" />
  4. </head>
  5. <body>
  6. <h1>您正在访问:192.168.22.230 </h1>
  7. </body>
  8. </html>

编写完成后,启动229,230服务器上的Tomcat,并在windows上测试是否启动成功
分别输入url:
http://192.168.22.229:8080/drp/login.html
http://192.168.22.230:8080/drp/login.html
测试是否能够访问。

修改Nginx核心配置文件nginx.conf

下面配置文件中的几个关键点:
(1)进程数与每个进程的最大连接数

  
  
  1. #工作进程个数,一般跟服务器cpu核数相等,或者核数的两倍
  2. worker_processes 2;
  3. #单个进程最大连接数
  4. events{
  5. worker_connections 1024;
  6. }
① nginx进程数,建议设置为和服务器cup核数相等,或者是核数的两倍
② 单个进程最大连接数,该服务器的最大连接数=连接数*进程数; 服务器支持最大并发数=(连接数*进程数) /2 ,因为反向代理是双向的。

(2)Nginx的基本配置

  
  
  1. #nginx基本配置
  2. server{
  3. listen 8088; #端口号
  4. server_name 192.168 .22 .227; #服务名
  5. }

① 监听端口一般都为http端口:80;可以修改为其他,这里修改为8088。
② server_name :默认为服务的名称 ,这里修改为服务器ip地址也可以。

(3)负载均衡列表基本配置

  
  
  1. #服务器集群
  2. upstream mycluster{
  3. #这里添加的是上面启动好的两台Tomcat服务器
  4. server 192.168 .22 .229: 8080 weight= 1;
  5. server 192.168 .22 .230: 8080 weight= 1;
  6. }
  7. location /{
  8. #将访问请求转向至服务器集群,mycluster和上面upstream mycluster 对应
  9. proxy_pass http://mycluster;
  10. # 真实的客户端IP
  11. proxy_set_header X-Real-IP $remote_addr;
  12. # 请求头中Host信息
  13. proxy_set_header Host $host;
  14. # 代理路由信息,此处取IP有安全隐患
  15. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  16. # 真实的用户访问协议
  17. proxy_set_header X-Forwarded-Proto $scheme;
  18. }
① location / {}:负载均衡访问的请求,可以添加筛选,假如我们要对所有的jsp后缀的文件进行负载均衡时,可以这样写:location ~ .*.jsp$ {}
② proxy_pass:请求转向自定义的服务器列表,这里我们将请求都转向标识为http://mycluster 的负载均衡服务器列表;
③ 在负载均衡服务器列表的配置中,Server指令:指定服务器的ip地址,weight是权重,可以根据机器配置定义权重(如果某台服务器的硬件配置十分好,可以处理更多的请求,那么可以为其设置一个比较高的weight;而有一台的服务器的硬件配置比较差,那么可以将前一台的weight配置为weight=2,后一台差的配置为weight=1)。weigth参数表示权值,权值越高被访问到的几率越大;

(四)完整的配置文件示例


  
  
  1. user nobody;
  2. #工作进程个数,一般跟服务器cpu核数相等,或者核数的两倍
  3. worker_processes 2;
  4. #单个进程最大连接数
  5. events{
  6. worker_connections 1024;
  7. }
  8. http{
  9. keepalive_timeout 65;
  10. gzip on;
  11. #服务器集群访问http://mycluster;会反向这些服务
  12. upstream mycluster{
  13. #集群有几台服务器即可配置几台,weight表示权重,权重越大被访问到的几率越大
  14. #这里添加的是上面启动好的两台Tomcat服务器
  15. server 192.168 .22 .229: 8080 weight= 1;
  16. server 192.168 .22 .230: 8080 weight= 1;
  17. }
  18. #服务器集群访问http://www.test.com;会反向这些服务
  19. #upstream www.test.com{
  20. # #集群有几台服务器即可配置几台,weight表示权重,权重越大被访问到的几率越大
  21. # server 192.168.22.229:8081 weight=1;
  22. # server 192.168.22.230:8081 weight=1;
  23. #}
  24. #服务器集群访问http://www.sso.com;会反向这些服务
  25. #upstream www.sso.com{
  26. # #集群有几台服务器即可配置几台,weight表示权重,权重越大被访问到的几率越大
  27. # server 192.168.22.229:8082 weight=1;
  28. # server 192.168.22.230:8082 weight=1;
  29. #}
  30. #nginx基本配置
  31. server{
  32. listen 8088; #端口号
  33. server_name 192.168 .22 .227; #服务名
  34. location /{
  35. #将访问请求转向至服务器集群,mycluster和上面upstream mycluster 对应
  36. proxy_pass http://mycluster;
  37. # 真实的客户端IP
  38. proxy_set_header X-Real-IP $remote_addr;
  39. # 请求头中Host信息
  40. proxy_set_header Host $host;
  41. # 代理路由信息,此处取IP有安全隐患
  42. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  43. # 真实的用户访问协议
  44. proxy_set_header X-Forwarded-Proto $scheme;
  45. }
  46. error_page 500 502 503 504 / 50x.html;
  47. location = / 50x.html {
  48. root html;
  49. }
  50. }
  51. #nginx拦截多个域名进行反向代理
  52. #server{
  53. # listen 8088; #端口号
  54. # server_name www.test.com; #服务名
  55. # location /{
  56. # #将访问请求转向至服务器集群,www.test.com和上面upstream www.test.com 对应
  57. # proxy_pass http://www.test.com;
  58. # # 真实的客户端IP
  59. # proxy_set_header X-Real-IP $remote_addr;
  60. # # 请求头中Host信息
  61. # proxy_set_header Host $host;
  62. # # 代理路由信息,此处取IP有安全隐患
  63. # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  64. # # 真实的用户访问协议
  65. # proxy_set_header X-Forwarded-Proto $scheme;
  66. # }
  67. # error_page 500 502 503 504 /50x.html;
  68. # location = /50x.html {
  69. # root html;
  70. # }
  71. #}
  72. #nginx拦截多个域名进行反向代理
  73. #server{
  74. # listen 8088; #端口号
  75. # server_name www.sso.com; #服务名
  76. # location /{
  77. # #将访问请求转向至服务器集群,www.sso.com和上面upstream www.sso.com 对应
  78. # proxy_pass http://www.sso.com;
  79. # # 真实的客户端IP
  80. # proxy_set_header X-Real-IP $remote_addr;
  81. # # 请求头中Host信息
  82. # proxy_set_header Host $host;
  83. # # 代理路由信息,此处取IP有安全隐患
  84. # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  85. # # 真实的用户访问协议
  86. # proxy_set_header X-Forwarded-Proto $scheme;
  87. # }
  88. # error_page 500 502 503 504 /50x.html;
  89. # location = /50x.html {
  90. # root html;
  91. # }
  92. #}
  93. }

最基本的Nginx配置差不多就是上面这些内容,当然仅仅是最基础的配置。如果是拦截多域名就是上面配置多个upstream 下面对应配置多个server  上面的配置我是配置了拦截3个域名  剩下两个我注释掉了!用的话打开就行


在浏览器中进行负载均衡测试

在浏览器中输入 : http://192.168.22.227:8088/drp/login.html




不断刷新浏览器,访问的地址一直在变化,可以看到负载均衡的效果已经实现。

小结

这篇文章通过Nginx反向代理实现了Tomcat服务器集群的负载均衡效果。从这个Demo中,我们可以简单地感受到反向代理为我们所做的事情,并体会到什么是负载均衡。当然这次只是简单的使用了一下Nginx,做了一些很简单的配置,后续会做一些针对负载均衡的优化配置,还有就是Session共享的问题,以及Nginx高可用的问题,这些知识后续博客会介绍到,万丈高楼平地起,一步一步来。

猜你喜欢

转载自blog.csdn.net/qq_43298012/article/details/87890305