Nginx 实现反向代理、负载均衡

一、反向代理

需求:浏览器访问 http://www.xiaomaomao.com/index.html 最终跳转到访问 http://192.168.229.135:8080/index.html

1、在 Windows 的 hosts 文件中配置域名和 IP 地址的映射关系

找到 C:WindowsSystem32driversetc 路径(我这是 Windows 10 系统),下面有一个 hosts 文件,打开该文件进行如下配置

// 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

打开配置文件

sudo vim /etc/sysconfig/iptables

编辑模式下加入下列配置,保存退出

-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 主机下的资源.

原文地址:https://www.cnblogs.com/xiaomaomao/p/14081295.html