Nginx 实现反向代理、负载均衡
一、反向代理
需求:浏览器访问 http://www.xiaomaomao.com/index.html 最终跳转到访问 http://192.168.229.135:8080/index.html
1、在 Windows 的 hosts 文件中配置域名和 IP 地址的映射关系
找到 C:\Windows\System32\drivers\etc 路径(我这是 Windows 10 系统),下面有一个 hosts 文件,打开该文件进行如下配置
1 2 | // Windows 浏览器访问 http://www.xiaomaomao.com 实际上就是访问 http://192.168.229.135:80 192.168 . 229.135 www.xiaomaomao.com |
2、Linux 主机 192.168.229.135 开放 80、8080端口
开放 80 端口是给 Nginx 使用的,因为 Nginx 默认监听的端口是 80
开放 8080 端口是给 tomcat 使用的,因为 tomcat 默认监听的端口是 8080
打开配置文件
1 | sudo vim /etc/sysconfig/iptables |
编辑模式下加入下列配置,保存退出
1 2 | -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT |
3、在 192.168.229.135 主机上新建一个测试文件 index.html 放置在 /webapps/ROOT 目录下,然后启动 tomcat (默认端口是 8080)
由于我们没有部署项目,只是新建了一个 index.html 用于测试,这个 index.html 一定要放在 tomcat 下面 webapps/ROOT/ 目录下,否则你是访问不到 index.html 的
4、修改 Nginx 配置文件(我这里的 Nginx 部署在 192.168.229.135 主机上)
这里我们来整理一下:
浏览器发起请求 http://www.xiaomaomao/index.html ,由于是 web 应用,它有默认的端口 80 (当然你写 80 端口和不写 80 端口其实是一样的),那么就相当于是访问 http://www.xiaomaomao:80/index.html ,又由于我们在 Windows 配置了域名和 IP 地址的映射关系, 访问 http://www.xiaomaomao:80/index.html 实际上就相当于访问 http://192.168.229.135:80/index.html ,再看看我们在 Nginx 中 Server 中配置的不就是 192.168.229.135:80 吗,这样就会被 Nginx 监听到,监听到了这个请求之后, Nginx 会负责将这个请求转发出去, proxy_pass 配置项就是要告诉 Nginx 要将监听到的请求转发到哪个主机,哪个端口,我们这里配置的是 http://192.168.229.135:8080
你可以这样认为 http://www.xiaomaomao 等价于 http://www.xiaomaomao:80 等价于 http://192.168.229.135:80 等价于 http://192.168.229.135:8080
而 http://192.168.229.135:8080 是什么呢? 我们在 192.168.229.135 这台主机上启动了 tomcat ,而 tomcat 默认的端口就是 8080 ,所以访问 http://www.xiaomaomao/index.html 就是相当于是访问 http://192.168.229.135:8080/index.html
5、测试
二、负载均衡
需求:访问 http://www.xiaomaomao/index.html 请求会按照一定的规则随机访问 http://192.168.229.134:8080/index.html、http://192.168.229.135:8080/index.html
1、配置 Windows 域名和 IP 地址之间的映射
这个我们在上面的反向代理案例中已经配置好了.
2、192.168.229.134、192.168.229.135 开放 80 和 8080 端口
实际上 135 主机需要开放 80 和 8080 端口,而 134 主机只需要开放 tomcat 默认监听的 8080 端口就可以了,因为 80 端口是 Nginx 监听的端口,而我们的 Nginx 是部署在 135 主机上的,134主机并没有部署 Nginx.
3、192.168.229.134、192.168.229.135 新建 index.html ,并且放置在 webapps/ROOT/ 目录下, 然后启动两台主机上的 tomcat
4、修改 Nginx 的配置文件 (我把 Nginx 装在 192.168.229.135 这台主机上)
千万要注意 upstream myServer 这段代码是在 http 模块中,并且它是在 server 模块外面的,不要放错了位置.
5、启动 Nginx
修改完了 Nginx 配置文件之后,如果你的 Nginx 是已经启动的状态,使用 ./nginx -s reload 命令重新加载就可以了(前提是你是在 Nginx 的 sbin 目录下),不需要重新启动,如果 Nginx 是没有启动的状态,直接启动就可以了.
6、测试
浏览器输入请求地址 http://www.xiaomaomao.com/index.html 访问到了 134 主机下的资源.
再次发送一次请求,访问到了 135 主机下的资源.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?