目录
前言
一、NGINX正向代理与反向代理
1.1、NGINX正向代理
1.2、NGINX反向代理
1. 2.1Nginx配置反向代理的主要参数
二、负载均衡
三、NGINX动静分离集群
3.1动静分离原理
四、Nginx+Tomcat动静分离
4.1搭建nginx代理服务器192.168.14.100
4.1.1安装 NGINX依赖环境
4.1.2创建程序用户
4. 1.3解包
4.1.4选择安装,并开启相应的模块
4.1.5编译并安装
4.1.6创建软连接
4.1.7配置nginx.service
4.2部署1Tomcat 应用服务器 192.168.14.101
4.2.1解包jdk
4.2.2配置全局变量
4.2.3解压Apache
4.2.4启动shell文件
4.2.5查看Tomcat是否启动
4.2部署2Tomcat 应用服务器 192.168.14.102
第一步、先安装包文件
第二步、将该文件解包
第三步、配置全局变量
第四步、将两个Tomcat路径换一下
第五步、开启Tomcat服务
第六步、 Tomcat1 server 192.168.14.102配置
第六步 Tomcat2 server 配置 192.168.14.103
第七步、Nginx server 配置 ,准备静态页面和静态图片
第八步、配置nginx.conf
最后,测试一下
总结
前言
Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。 Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。
一、NGINX正向代理与反向代理
1.1、NGINX正向代理
正向代理,指的是通过代理服务器代理浏览器/客户端去重定向请求访问到目标服务器的一种代理服务。
正向代理服务的特点是代理服务器代理的对象是浏览器/客户端,也就是对于目标服务器来说浏览器/客户端是隐藏的。
1.2、NGINX反向代理
浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器 ,代理服务器再通过反向代理 +负载均衡实现请求分发到应用服务器的一种代理服务。
反向代理服务的特点是代理服务器 代理的对象是应用服务器,也就是对于浏览器/客户端 来说应用服务器是隐藏的。
1. 2.1Nginx配置反向代理的主要参数
- upstream 服务池名{}
- 配置后端服务器池,以提供响应数据
- proxy_pass http://服务池名
- 配置将访问请求转发给后端服务器池的服务器处理
二、负载均衡
根据分流算法把不同的请求转发到不同的服务器上
三、NGINX动静分离集群
3.1动静分离原理
服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务动态资源Nginx转发至后端。
四、Nginx+Tomcat动静分离
4.1搭建nginx代理服务器192.168.14.100
4.1.1安装 NGINX依赖环境
4.1.2创建程序用户
4. 1.3解包
4.1.4选择安装,并开启相应的模块
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \ #启用文件修改支持
--with-http_stub_status_module \ #启用状态统计
--with-http_gzip_static_module \ #启用 gzip静态压缩
--with-http_flv_module \ #启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module \ #启用 SSL模块,提供SSL加密功能
--with-stream #启用 stream模块,提供4层调度
4.1.5编译并安装
make && make install
4.1.6创建软连接
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
4.1.7配置nginx.service
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
4.2部署1Tomcat 应用服务器 192.168.14.101
4.2.1解包jdk
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
4.2.2配置全局变量
4.2.3解压Apache
4.2.4启动shell文件
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
4.2.5查看Tomcat是否启动
出现下面的页面就是安装成功了
4.2部署2Tomcat 应用服务器 192.168.14.102
这里的和部署1Tomcat查不到,但是这个服务器要安装两天Tomcat
第一步、先安装包文件
第二步、将该文件解包
注意:这里要安装两个Tomcat
第三步、配置全局变量
source /etc/profile
第四步、将两个Tomcat路径换一下
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat/tomcat1
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat/tomcat2
第五步、开启Tomcat服务
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
/usr/local/tomcat/tomcat2/bin/shutdown.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
8080的端口
8081的端口
第六步、 Tomcat1 server 192.168.14.102配置
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title> #指定为 test1 页面
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>
vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
</Context>
</Host>
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
修改配置文件更改端口 /usr/local/tomcat/tomcat2/conf/server.xml
第六步 Tomcat2 server 配置 192.168.14.103
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title> #指定为 test2 页面
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>
vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
tocmat shell 脚本 case
vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test3 page</title> #指定为 test3 页面
</head>
<body>
<% out.println("动态页面 3,http://www.test3.com");%>
</body>
</html>
vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</Host>
/usr/local/tomcat/tomcat2/bin/shutdown.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
8080端口
80801端口
第七步、Nginx server 配置 ,准备静态页面和静态图片
echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cp /root/game.jpg /usr/local/nginx/html/img
第八步、配置nginx.conf
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
#gzip on;
#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
upstream tomcat_server {
server 192.168.80.100:8080 weight=1;
server 192.168.80.101:8080 weight=1;
server 192.168.80.101:8081 weight=1;
}
server {
listen 80;
server_name www.kgc.com;
charset utf-8;
#access_log logs/host.access.log main;
#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
location ~ .*\.jsp$ {
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;
}
#配置Nginx处理静态图片请求
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 10d;
}
location / {
root html;
index index.html index.htm;
}
......
}
......
}
最后,测试一下
测试静态页面效果
浏览器访http://192.168.14.100/
浏览器访问http://192.168.14.100/two.jpg
测试负载均衡效果,不断刷新浏览器测试
浏览器访问 http://192.168.14.100/index.jsp
访问结果
总结
Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发。
但是不是把所有的web请求转发,而是将静态页面请求Nginx服务器自己来处理,动态页面请求,转发给后端的Tomcat服务器来处理。