Nginx反向代理和Tomcat联动之多实例部署,动静分离,负载均衡

153 阅读6分钟

一.反向代理

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;
    }
}

image.png

7-2 真实服务器

image.png

7-3客户机

curl 192.168.47.100
#输入代理服务器的ip

image.png

二. Tomcat 多实例部署

  1. cd /opt #将tomcat、jdk包拖入并且解压jdk 将jdk移动到usr/local方便管理

image.png

🥞

image.png

 cd /etc/profile.d/
 vim java.sh

 

image.png

刷新查看

[root@localhost profile.d]# source java.sh
[root@localhost profile.d]# java -version

image.png

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 ,并且改名,方便管理

image.png

cd  /tomcat
cd conf
vim server.xml 

image.png

更改如下

修改 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

image.png

image.png

image.png

修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
vim /usr/local/tomcat/tomcat1/bin/startup.sh 

image.png

增加内容如下

vim startup.sh

export CATALINA_BASE=/usr/local/tomcat1
export CATALINA_HOME=/usr/local/tomcat1
export TOMCAT_HOME=/usr/local/tomcat1

image.png

vim shutdown.sh

image.png

   export CATALINA_BASE=/usr/local/tomcat1
    export CATALINA_HOME=/usr/local/tomcat1
    export TOMCAT_HOME=/usr/local/tomcat1

image.png

cd /usr/local/tomcat2/bin
 #编写启动文件

image.png

🥙 启动,关闭文件同一个地方添加相同的内容

image.png

路径启动

image.png

查看端口号

image.png

网页查看

image.png

三. 反向代理中动静分离

原理:

  • 服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端

Nginx静态处理优势

  1. Nginx处理静态页面的效率远高于Tomcat的处理能力
  2. 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
  3. Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞量为3.6M
  4. Nginx处理静态资源的能力是Tomcat处理的6倍

实现过程图

image.png

实验内容:

服务器上部署多个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>

image.png

7-2编写

image.png

将编写的test.sh改名为test.jsp

image.png

image.png

将编写的test.sh改名为test.jsp

image.png

网页验证

image.png

image.png

image.png

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

image.png

image.png

网页检测

image.png

nginx动态页面设置完毕 ↑面

动静态页面准备完毕,开始应用反向代理实现动静分离

image.png

添加内容

动态资源服务器地址池

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;

image.png

编写子配置文件

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;
}
}

image.png

网页输入7-3:192.168.47.110代理服务器的ip测试

image.png

一直刷新 轮询 image.png

四. 负载均衡

基于上面的动静分离基础上做升级负载均衡

一个nginx 只能处理2,3万并发,现在有5万静态页面并发,再添加一个nginx服务器(这个实现7层代理,将请求转发给tomcat服务器)

现在出现问题,怎么实现两台服务器一起实现,再加一个nginx实现做4层(下图中绿色的)反向代理 做负载均衡(网关,负载均衡,提高并发能力)

示意图:

image.png

  1. 基于上面实验下面继续添加2台nginx
  2. 一台做nginx7层转发

image.png

  1. 一台做nginx4层负载均衡

image.png

1.实操过程

7-4做7层转发服务

关闭防火墙

image.png

**安装nginx

2.将7-3的nginx配置文件转入7-4下面

image.png

3.去7-4nginx服务器下面

image.png

4.去修改配置文件

vim nginx.conf

image.png

vim /apps/nginx/conf.d/default.conf

image.png

重启

image.png

网页测试

image.png

image.png

7-5 做负载均衡服务器

编译先安装nginx

cd /usr/local/nginx/

vim nginx.conf

1.编写nginx的配置文件

image.png

image.png

image.png

为了防止长连接影响实验流畅性,关闭长连接。

image.png

然后重启服务:systemctl restart nginx.service

去7-3反向代理nginx服务器,关闭长连接。并且重启

image.png

去7-4反向代理nginx服务器,关闭长连接。并且重启

image.png

网页访问测试

image.png

image.png