Nginx反向代理与负载均衡
一、Nginx 反向代理
实现效果:使用 nginx 反向代理,访问 192.168.88.88
直接跳转到 127.0.0.1:15672
,即访问 Nginx 跳转到 RabbitMQ 的管理页面
修改配置文件
1 | vim /usr/local/nginx/conf/nginx.conf |
需要增加的内容:
1 | # 配置反向代理 |
修改完成以后使用nginx -t
测试配置文件修改后的语法是否正确(如果有问题会报错)
1 | nginx -t |
使用命令nginx -s reload
让配置文件生效
1 | nginx -s reload |
实现效果:
二、负载均衡
负载均衡是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。
快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎,nginx 就是其中的一个,在 linux 下有 Nginx、LVS、Haproxy 等等服务可以提供负载均衡服务,而且 Nginx 提供了几种分配策略。
1、准备工作
关于 Linux 版本的 tomcat 服务:Linux_服务器端应用程序安装
① 配置两台不同版本的 tomcat
重命名方便区分,其中 tomcat-8080 版本是 Tomcat/8.5.66,而 tomcat-9090 的版本号是 Tomcat/7.0.75
② 配置端口号
因为要启动两台 tomcat,所以需要配置 tomcat 的端口号,进入 tomcat-9090 的 conf 目录下,修改 server.xml 文件
Tomcat 默认端口备注:
8005:表示用于停止 Tomcat 的默认端口
8080:表示 HTTP 连接的默认端口
8009:表示 Apache 的侦听默认端口
8443:表示 SSL 的连接默认端口
1 | vim /opt/tomcat-9090/conf/server.xml |
[1]需要修改的地方一,搜索 8080 修改为 9090
:/8080
1 | <Connector port="8080" protocol="HTTP/1.1" |
这种修改对于 8080 端口冲突是可以解决的,但是如果想同时使用两个 tomcat,这样的修改还不完整,因为还有其它的端口会冲突。我们仍需要继续修改
[2]需要修改的地方二,搜索 8009 修改为其它
:/8009
1 | <!-- Define an AJP 1.3 Connector on port 8009 --> |
[3]需要修改的地方三,搜索 8005 修改为其它
:/8005
1 | <Server port="8005" shutdown="SHUTDOWN"> |
启动两台 tomcat
1 | /opt/tomcat-8080/bin/startup.sh |
关闭两台 tomcat
1 | /opt/tomcat-8080/bin/shutdown.sh |
注意端口号修改不要超出端口号的取值范围是:0-65535
java.lang.IllegalArgumentException: port out of range:88005
浏览器访问:
查看是否可以正常访问
2、Nginx 的几种分配策略
① 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
配置 Nginx 的反向代理
1 | vim /usr/local/nginx/conf/nginx.conf |
1 | # 反向代理配置 |
浏览器访问:http://192.168.88.88/ (我的虚拟机 ip)
出现:
这是配置文件的问题,修改 Nginx 的反向代理配置
1 | # 反向代理配置 |
使用命令nginx -s reload
让配置文件生效
之后再次访问,可以看到每刷新一次,会轮流分配到不同的 tomcat
②weight 权重
所谓的负载均衡简单说就是将一台服务原来承受的压力由多台服务器来分配,可以在 nginx 中实现 tomcat 集群,通过 weight 来分配权重。
weight 代表权重,默认为 1,权重越高被分配的客户端越多
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。
1 | # 反向代理配置 |
效果:
③ip_hash
每个请求按访问 ip 的 hash 值分配,这样每个访问客户端会固定访问一个后端服务器,这样可以解决会话 Session 丢失的问题
1 | # 反向代理配置 |
不管刷新多少遍,始终访问的是同一台 tomcat 服务器
④ 最少连接
web 请求会被转发到连接数最少的服务器上
1 | # 反向代理配置 |