nginx 配置反向代理
nginx 配置反向代理
基本概念
代理:代替处理
正向代理
正向代理方式是指用代理服务器来代替内部网络中的计算机(配置好代理服务器的 IP)发出 Internet 上的连接请求,然后将请求结果返回给他们。
反向代理
反向代理方式是指用代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外的表现就是一个 Web 服务器。充当反向代理服务器也是 Nginx 的一种常见用法。
正向代理、反向代理区别
- 正向代理代理客户端,反向代理代理服务端。
- 正向代理隐藏客户端,反向代理隐藏服务端。
练习
下面练习配置 nginx 反向代理,让 nginx 充当反向代理服务器。
-
部署 travel 项目 到被代理服务器 tomcat
删除 tomcat 自带项目 cd /usr/local/tomcat/apache-tomcat-7.0.57/webapps rm -rf ./* 将 travel 项目打包成 ROOT.war 修改 finalName <finalName>ROOT</finalName> 打包 mvn package 注:打成 ROOT.war 的好处是在 tomcat 中部署后,不需要去输入项目名称访问。 上传 ROOT.war cd /usr/local/tomcat/apache-tomcat-7.0.57/webapps rz 启动 tomcat cd /usr/local/tomcat/apache-tomcat-7.0.57/bin ./startup.sh 访问 ROOT 项目 本地火狐浏览器地址栏输入:192.168.214.128:8080
-
配置反向代理服务器 nginx
在 nginx 配置文件 nginx.conf 中: # upstream 定义了一个上游服务器的集群(这里只有一个上游服务器),便于反向代理中的 proxy_pass 使用 upstream tomcat-travel { server 192.168.214.128:8080; # 被代理服务器的 ip 和端口 } server { listen 80; server_name www.hmtravel.com; location / { proxy_pass http://tomcat-travel; # 引用上面 upstream 中的 tomcat-travel index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
-
启动反向代理服务器 nginx
cd /usr/local/nginx/sbin ./nginx
-
访问 travel 项目
直接访问被代理服务器上的 travel 项目 本地火狐浏览器地址栏输入 http://192.168.214.128:8080 通过反向代理服务器访问 travel 项目 本地火狐浏览器地址栏输入 http://wwww.hmtravel.com
nginx 基于反向代理/转发的负载均衡
基本概念
服务器集群
多个 tomcat 上部署同一个项目,同时对外提供服务,就形成了 tomcat 的集群。
好处:
增强并发能力
避免单点故障
负载均衡
如果服务器集群中的计算机性能都一样,那么应该做到每一个被访问的几率一样,这就是负载均衡。
练习
下面练习使用 nginx 实现基于反向代理/转发的负载均衡。
部署 travel 项目到 3 个 tomcat
需要在 3 台不同的机器上安装 tomcat,部署同一个 travel 项目。
但是为了学习方便,现在将 3 个 tomcat 安装在同一台机器上。
这台机器上之前已经通过解压安装了一份 tomcat,解压在 /usr/local/tomcat/apache-tomcat-7.0.57,
并且已经上传了 travel 项目,
因此再安装 3 份 tomcat 并部署 travel 的做法如下:
1. 停止 tomcat
cd /usr/local/tomcat/apache-tomcat-7.0.57/bin
./shutdown.sh
2. 复制 3 份
cd /usr/local/tomcat
cp -r apache-tomcat-7.0.57 tomcat1
cp -r apache-tomcat-7.0.57 tomcat2
cp -r apache-tomcat-7.0.57 tomcat3
3. 修改端口
3.1 修改 tomcat1 端口
cd /usr/local/tomcat/tomcat1/conf
vim server.xml
设置忽略大小写
:set ignorecase
查找 port
/port
按 n 查找下一个,按 N 查找上一个
将查找到的所有端口值 + 1(一共修改 5 个)
保存退出
3.2 修改 tomcat2 端口
同样的方法,将对应配置文件中查找到的端口值 + 2
3.3 修改 tomcat3 端口
同样的方法,将对应配置文件中查找到的端口值 + 3
4. 启动 3 个tomcat
cd /usr/local/tomcat/tomcat1/bin
./startup.sh
cd /usr/local/tomcat/tomcat2/bin
./startup.sh
cd /usr/local/tomcat/tomcat3/bin
./startup.sh
配置反向代理服务器 nginx
nginx 配置文件 nginx.conf 中:
# upstream 定义了一个上游服务器的集群
upstream tomcat-travel {
# 向这 3 台上游服务器转发的几率相同,都为 1/3
server 192.168.214.128:8081; # 被代理服务器 tomcat1 的 ip 和端口
server 192.168.214.128:8082; # 被代理服务器 tomcat2 的 ip 和端口
server 192.168.214.128:8083; # 被代理服务器 tomcat3 的 ip 和端口
}
server {
listen 80;
server_name www.hmtravel.com;
location / {
proxy_pass http://tomcat-travel; # 引用上面 upstream 中的 tomcat-travel
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
启动 nginx 或 重新加载 nginx 配置文件
cd /usr/local/nginx/sbin
./nginx
或
cd /usr/local/nginx/sbin
./nginx -s reload
通过反向代理服务器访问 travel 项目
本地火狐浏览器地址栏输入 http://www.hmtravel.com,可以访问到 travel 项目。
这个 travel 项目来自 tomcat1,也可能来自 tomcat2,还有可能来自 tomcat3,几率相等。
验证负载均衡
-
区分 travel 项目
为了验证访问 3 个 tomcat 的几率相同,故意将部署在 3 个 tomcat 里的 travel 项目变得不一样。 将部署在 tomcat1 里的travel 项目的首页 index.html 的标题改为 tomcat1 将部署在 tomcat2 里的travel 项目的首页 index.html 的标题改为 tomcat2 将部署在 tomcat3 里的travel 项目的首页 index.html 的标题改为 tomcat3 注:html 的修改不必重启 tomcat
-
再通过反向代理服务器访问 travel 项目
本地火狐浏览器地址栏输入 http://www.hmtravel.com,可以访问到 travel 项目。 非常快地刷新 n 次,能够看出 tomcat1,tomcat2,tomcat3 的比例接近 1:1:1。
-
修改负载均衡配置
将来 tomcat1 tomcat2 tomcat3 会部署在不同的机器上。假设 tomcat3 所在机器是新买的,性能较好。希望 tomcat3 接受 50% 访问量,tomcat1,tomcat2 分别接受 25% 访问量。可以修改 nginx 配置文件 nginx.conf 进行配置。
# upstream 定义了一个上游服务器的集群 upstream tomcat-travel { # 向这 3 台上游服务器转发的几率相同,都为 1/3 server 192.168.214.128:8081; # 被代理服务器 tomcat1 的 ip 和端口 server 192.168.214.128:8082; # 被代理服务器 tomcat2 的 ip 和端口 server 192.168.214.128:8083 weight=2; # 被代理服务器 tomcat3 的 ip 和端口 } server { listen 80; server_name www.hmtravel.com; location / { proxy_pass http://tomcat-travel; # 引用上面 upstream 中的 tomcat-travel index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
-
重新加载 nginx 配置文件
cd /usr/local/nginx/sbin ./nginx -s reload
-
通过反向代理服务器访问 travel 项目
本地火狐浏览器地址栏输入 http://www.hmtravel.com,可以访问到 travel 项目。 非常快地刷新 n 次,能够看出 tomcat1,tomcat2,tomcat3 的比例接近 1:1:2。