一.反向代理
1.简介
-
反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。
-
Nginx 除了可以在企业提供高性能的web服务之外,另外还可以将 nginx 本身不具备的请求通过某种预定义的协议转发至其它服务器处理,不同的协议就是Nginx服务器与其他服务器进行通信的一种规范,主要在不同的场景使用以下模块实现不同的功能
ngx_http_proxy_module: #将客户端的请求以http协议转发至指定服务器进行处理
ngx_http_upstream_module #用于定义为proxy_pass,fastcgi_pass,uwsgi_pass等指令引用的后
端服务器分组
ngx_stream_proxy_module:#将客户端的请求以tcp协议转发至指定服务器处理
ngx_http_fastcgi_module:#将客户端对php的请求以fastcgi协议转发至指定服务器助理
ngx_http_uwsgi_module: #将客户端对Python的请求以uwsgi协议转发至指定服务器处理
1. 反向代理配置参数
proxy_pass;
#用来设置将客户端请求转发给的后端服务器的主机,可以是主机名(将转发至后端服务做为主机头首部)、IP
地址:端口的方式
#也可以代理到预先设置的主机群组,需要模块ngx_http_upstream_module支持
#示例:
location /web {
index index.html;
proxy_pass http://10.0.0.18:8080; #8080后面无uri,即无 / 符号,需要将location后面url 附加到proxy_pass指定的url后面,此行为类似于root
#proxy_pass指定的uri不带斜线将访问的/web,等于访问后端服务器
http://10.0.0.18:8080/web/index.html,即后端服务器配置的站点根目录要有web目录才可以被访问
# http://nginx/web/index.html ==> http://10.0.0.18:8080/web/index.html
proxy_pass http://10.0.0.18:8080/; #8080后面有uri,即有 / 符号,相当于置换,即访问/web时实际返回proxy_pass后面uri内容.此行为类似于alias
#proxy_pass指定的uri带斜线,等于访问后端服务器的http://10.0.0.18:8080/index.html 内容返回给客户端
} # http://nginx/web/index.html ==> http://10.0.0.18:8080
实例:
7-1代理服务器
server{
listen 192.168.47.100:80;
server_name www.pc.com;
location / {
root /apps/nginx/html/pc;
proxy_pass http://192.168.47.74;
}
}
7-2 真实服务器
7-3客户机
curl 192.168.47.100
#输入代理服务器的ip
二. Tomcat 多实例部署
- cd /opt #将tomcat、jdk包拖入并且解压jdk 将jdk移动到usr/local方便管理
🥞
cd /etc/profile.d/
vim java.sh
刷新查看
[root@localhost profile.d]# source java.sh
[root@localhost profile.d]# java -version
2.
cd /opt
tar xf apache-tomcat-8.5.16.tar.gz
#解压tomcat、
[root@localhost opt]# cp -a apache-tomcat-8.5.16 /usr/local/tomcat1
[root@localhost opt]# cp -a apache-tomcat-8.5.16 /usr/local/tomcat2
将tomcat复制到usr/local ,并且改名,方便管理
cd /tomcat
cd conf
vim server.xml
更改如下
修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号
vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN"> #22行,修改Server prot,默认为8005 -> 修改为8006
<Connector port="8081" protocol="HTTP/1.1" #69行,修改Connector port,HTTP/1.1 默认为8080 -> 修改为8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /> #116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010
修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
vim /usr/local/tomcat/tomcat1/bin/startup.sh
增加内容如下
vim startup.sh
export CATALINA_BASE=/usr/local/tomcat1
export CATALINA_HOME=/usr/local/tomcat1
export TOMCAT_HOME=/usr/local/tomcat1
vim shutdown.sh
export CATALINA_BASE=/usr/local/tomcat1
export CATALINA_HOME=/usr/local/tomcat1
export TOMCAT_HOME=/usr/local/tomcat1
cd /usr/local/tomcat2/bin
#编写启动文件
🥙 启动,关闭文件同一个地方添加相同的内容
路径启动
查看端口号
网页查看
三. 反向代理中动静分离
原理:
- 服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端
Nginx静态处理优势
- Nginx处理静态页面的效率远高于Tomcat的处理能力
- 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
- Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞量为3.6M
- Nginx处理静态资源的能力是Tomcat处理的6倍
实现过程图
实验内容:
服务器上部署多个Tomcat已经准备好了
7-1,7-2 为tomcat动态页面服务器
7-3 为 代理服务器静态处理nginx
具体操作:
去7-1服务器编写动态页面环境
#文件填写内容
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP tomcat3 page</title>
</head>
<body>
<% out.println("动态页面 3,a big pig");%>
</body>
</html>
去7-2编写
将编写的test.sh改名为test.jsp
将编写的test.sh改名为test.jsp
网页验证
Tomcat 动态页面已经准备完毕
7-1,7-2↑面
7-3开始准备nginx 代理服务准备静态资源
先安装nginx
[root@localhost src]# cd /apps/nginx/
[root@localhost nginx]# ls
client_body_temp conf conf.d fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
[root@localhost nginx]# cd html
[root@localhost html]# ls
50x.html index.html
[root@localhost html]# echo '<h1>this is nginx static web page!</h1>' >test.html
#制作静态页面
[root@localhost html]# ls
50x.html index.html test.html
[root@localhost html]# cat test.html
<h1>this is nginx static web page!</h1>
[root@localhost html]# systemctl start nginx
[root@localhost html]# systemctl enable nginx
网页检测
nginx动态页面设置完毕 ↑面
动静态页面准备完毕,开始应用反向代理实现动静分离
添加内容
动态资源服务器地址池
upstream backend {
server 192.168.47.74:8080 weight=1;
server 192.168.47.74:8081 weight=2;
server 192.168.47.100:8080 weight=1;
编写子配置文件
cd /apps/nginx/conf.d/
vim default.conf
proxy_pass http://tomcat_server;
#设置后端的Web服务器可以获取远程客户端的真实IP
##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来自反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。
proxy_set_header HOST $host;
##把$remote_addr赋值给X-Real-IP,来获取源IP
proxy_set_header X-Real-IP $remote_addr;
##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
server {
listen 80;
server_name localhost;
location ~* .*\.jsp$ {
proxy_pass http://backend;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
网页输入
7-3:192.168.47.110代理服务器的ip测试
一直刷新 轮询
四. 负载均衡
基于上面的动静分离基础上做升级负载均衡
一个nginx 只能处理2,3万并发,现在有5万静态页面并发,再添加一个nginx服务器(这个实现7层代理,将请求转发给tomcat服务器)
现在出现问题,怎么实现两台服务器一起实现,再加一个nginx实现做4层(下图中绿色的)反向代理 做负载均衡
(网关,负载均衡,提高并发能力)。
示意图:
- 基于上面实验下面继续添加2台nginx
- 一台做nginx7层转发
- 一台做nginx4层负载均衡
1.实操过程
7-4做7层转发服务
关闭防火墙
**安装nginx
2.将7-3的nginx配置文件转入7-4下面
3.去7-4nginx服务器下面
4.去修改配置文件
vim nginx.conf
vim /apps/nginx/conf.d/default.conf
重启
网页测试
7-5 做负载均衡服务器
编译先安装nginx
cd /usr/local/nginx/
vim nginx.conf
1.编写nginx的配置文件
为了防止长连接影响实验流畅性,关闭长连接。
然后重启服务:systemctl restart nginx.service
去7-3反向代理nginx服务器,关闭长连接。并且重启
去7-4反向代理nginx服务器,关闭长连接。并且重启
网页访问测试