1.概述

动静分离简单来说就是把动态请求跟静态请求分开,当然不仅仅是单纯地将动态页面和静态页面分开,而是将动态请求和静态请求分开。可以理解为使用nginx处理静态页面,tomcat处理动态页面。动静分离目前从实现的角度大致可分为两种,一种是纯粹地把静态文件独立成单独的域名,放于独立地服务器上,是目前的主流用法;另一种是将动态和静态文件混合在一起发布,通过nginx按请求路径分开。本文将演示第二种方式,通过配置nginx,跟据路径实现动静分离。

2.动静分离实现

2.1 安装nginx和tomcat

nginx的安装在前文中已经详述过,这里不再赘述。这里主要讲解一些tomcat的安装,首先新建文件或选择一个文件夹,进入文件夹后,利用wget获取tomcat安装包,具体指令如下:

wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.41/bin/apache-tomcat-8.5.41.tar.gz

安装成功后会出现以下界面:

nginx可以部署动态网站吗 nginx部署静态和动态_tomcat


我这里安装的主要是tomcat 8.5,具体版本可以跟据自己喜好来安装。安装成功之后解压安装包,指令如下:

tar -zxvf apache-tomcat-8.5.41.tar.gz

2.2 新增nginx配置文件

进入nginx的安装目录下,在nginx.conf中新增如下配置:

location /nginx/ {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
 }

 location /image/ {
          root /share/;
          autoindex on;
}

第一个location配置的是tomcat请求的路径,这里是直接转到8080端口。第二个location配置的静态文件(图片的访问路径),如果静态文件放在root路径下,需要授权,相对麻烦,我这边直接在root的上层目录,新建了一个share文件夹,放了两张图片img.jpg,timg.jpg,具体如下图所示:

nginx可以部署动态网站吗 nginx部署静态和动态_nginx_02

2.3 测试

1.启动tomcat
进入刚才tomcat解压后的bin目录下,启动tomcat,启动指令如下:

./startup.sh

启动成功会出现如下界面:

nginx可以部署动态网站吗 nginx部署静态和动态_nginx_03


2.启动nginx

/usr/local/nginx/sbin/nginx

3.测试动静分离
在本地浏览器中分别输入:
虚拟机地址+/image/img.jpg
虚拟机地址+/nginx/
我这里虚拟机地址为:192.168.228.130
则分别出现以下结果(图片来源于网络,侵删):

192.168.228.130/image/img.jpg

nginx可以部署动态网站吗 nginx部署静态和动态_tomcat_04

192.168.228.130/nginx/

nginx可以部署动态网站吗 nginx部署静态和动态_动静分离_05

3.小结

1.动静分离目前主流的做法还是将静态文件放于单独服务器上,域名独立;
2.在利于wget获取tomcat时,部分网站会显示

错误: 无法验证 mirrors.cnnic.cn 的由 “/C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Domain Validation Secure Server CA” 颁发的证书:颁发的证书已经过期。

本文提供的网站截至文章发布可以正常正常下载,遇到这种情况需要筛选一些可以进行正常下载的网站,或下载后上传到虚拟机。
3.在root文件夹防止静态图片并访问时,可能出现权限不足导致无法访问的情况,需要开放root文件访问权限,具体可参考相关资料。

4.参考文献

1.
2.https://www.huaweicloud.com/kunpeng/software/tomcat.html
3.1.https://www.bilibili.com/video/BV1zJ411w7SV?t=85&p=1