技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?

简介: 技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?

今天想把之前的一个demo用Nginx把资源分离开来,在网上看了一天,整整弄了一天,硬是没弄出来。


要么全是同样的内容的,要么就是环境跟我这里不一样的。再加上对Nginx没接触过,给我都整哭了差点。


终于,到了下午有一点起色了,终于没有白费,还有最重要的一点事,早看日志早完事了!!!


说明


这篇文章默认条件是你的nginx和tomcat都装好了,装好就可以,没配置可以看着文章一起配。


如果没有装的,可以参考下这里:nginx安装,tomcat安装


我这里就不弄负载均衡了,因为我只是想把静态资源抽离出来交给nginx而已。


然后关于nginx的什么反向代理,负载均衡,什么什么架构这些,我就不解释了,还不知道的可以先去看一下。


当然我觉得你要是能看这篇文章,这些基本的知识都知道了。


这些都不重要,重要的是,怎么搭出来,怎么配置出来,所以我觉得重中之重的就是nginx的配置。


我遇到的问题是这样的,我一个挂在服务器上的demo,是ssm写的,其中用了tomcat的虚拟目录来装商品图片。


它里面还用//代码效果参考:http://hnjlyzjd.com/xl/wz_24605.html

到了一些别的静态资源如js、css、txt、jpg等等,总之就是静态资源,懂不懂哈哈哈。

我的demo是实打实的用网址加8080端口访问出来的,


所以就是说一个已经正常运行的项目需要在nginx的帮助下,实现动静分离依然正常运行,


因为我看了一天的博文都是将如何从0开始搭的,我这就是半路出家,半路开始搭的。


虚拟目录


在那之前先来了解下Tomcat的虚拟目录,官方知识我就不普及了,我们直接看效果。



上面的标签就是在$TOMCAT/conf/server.xml这个文件里的,相信跑过demo的都知道。


path="/pimg" 是一个虚拟目录,是用来访问的, docBase="/home/pimg" 是一个物理目录,是用来存储的。


我访问 /pimg/aa.jpg ,真正去读的文件的是 /home/pimg/aa.jpg 。


所以说其实就是 /pimg 映射着 /home/pimg 这个路径。


访问地址是:


注意虚拟目录的访问是紧跟端口后面的。


关于虚拟目录的简单介绍就是这样,已经足矣。


Nginx的匹配规则


关于它的匹配规则有好几个,有server_name的,有location的,甚至rewirte的也算。


网上一搜一大把,我也不贴我的博客了,省得看起来像抄别人的一样。


而且抄也直接抄,错都不知道,我也是佛了,这都敢这样放自己博客上。


也不算错,就是他们最后一个应该是匹配字符串的结束,是打错字了,但抄的那个人也直接抄了。


命令


修改nginx的配置文件之后先检查再重启,如果觉得写的不错,可以跳过检查部分


检查


nginx -t //这个是用默认的命令检查默认的配置文件 -t表示检查


/usr/local/nginx/sbin/nginx -tc /usr/local/nginx/conf/nginx.conf //这是网上的,他们的nginx位置跟我的不一样


//可以简写成这个,nginx是在sbin里面的,sbin是$PATH的值,所以不用写路径。


nginx -tc /usr/local/nginx/conf/nginx.cnof


//然后-c代表指定配置文件,因为如果不指定就是加载默认的配置文件了


重启


nginx -s reload


解读配置文件


我的demo访问地址是


目录结构如下


所以就是想把那些非JSP的资源给挪到nginx管理,这样tomcat只负责处理serverlet请求,


加载资源就由nginx来,两两分工,自然访问速度就快了。


我的nginx.conf文件(server部分)如下:


  server {


listen 80;


server_name


location / { proxy_pass


}


#所有js,css相关的静态资源文件的请求由Nginx处理


location ~ ..(js|css)$ {


root /usr/share/nginx/jdfenli; #指定文件路径


expires 12h; #过期时间为12小时


}


#所有图片等多媒体相关静态资源文件的请求由Nginx处理


location ~ ..(html|jpg|jpeg|png|bmp|gif|ico|mp3|mid|wma|mp4|swf|flv|rar|zip|txt|doc|ppt|xls|pdf|ttf)$ {


root /usr/share/nginx/jdfenli; #指定文件路径


expires 7d; #过期时间为7天


}


# location ~ .jsp$ {


# proxy_pass


# }


  }


对上面的文件解读一下,记录下碰到的问题。


第一:我的demo实现了RESTful风格,所以不会有.jsp这个匹配,demo全都是serverlet的请求。


   所以最后一个Location可以注释掉。


第二:因为我的 server_name 是且监听80端口,所以在地址栏输入的时候


   会继续匹配跳转到 location / { proxy_pass }


   所以也就是说地址栏虽然还是但其实nginx已经访问了


所以返回的响应其实是tomcat返回的。其返回如下


   为什么会是文字呢,因为tomcat主页的css文件被nginx拦截了,


也就是说,静态资源应该跟nginx获取,而请求应该跟tomcat获取,


   所以上面的图就证明了我们的需求是成功的。


接下来,我们只需要把静态资源交给nginx就可以达到我们最初的目的啦。


第三:注意配置文件中的 root /usr/share/nginx/jdfenli ,这是我们自己随便找个地方建的文件夹,


   用来存放静态资源的。


第四:因为我们用tomcat的时候都是采用ip+端口号+项目名的形式去访问,


   也就是但我们现在使用nginx之后,我们希望访问地址是


   默认端口80。


第五:沿用了tomcat的访问习惯,请求任何东西都是带有项目名的,所以当请求静态资源的时候,一般是


   这时nginx匹配到你的url结尾是.jpg,就会自己处理这个


   资源,而不是去请求tomcat,它怎么处理呢,它会进入 root /usr/share/nginx/jdfenli 这个指令,


   也就是去指定的文件夹/usr/share/nginx/jdfenli看看有没有sssmshop/img/aa.jpg。


   没错,它原则就是将替换成/usr/share/nginx/jdfenli。


   所以,如果你在jdfenli文件夹直接放img/aa.jpg的话,会请求失败,因为路劲不正确。


   综上所述,root指定的文件夹下,放的是跟项目名级别的文件夹。


第六:由于tomcat的虚拟目录采用的也是跟项目名同一级别的,所以访问静态资源用的也是


   虚拟目录/abc.jpg


   结合第五点,nginx的root指定的文件夹下应该有一层文件夹,是属于紧跟端口后的。


   接下来才是静态资源的存放


整体而言差不多这样就能分离开来了,如果有问题可//代码效果参考:http://hnjlyzjd.com/xl/wz_24613.html

以联系我。

提醒


搞东西一定要记得看日志,我就是下午顿悟突然想起来为什么不看看日志呢。


果然一看日志之后,就发现请求地址跟我配的东西的区别了,这才能重新配正确。


经验还是太少了,以后一定要养成跟着日志走的习惯。。


若本文内容有误,请指出,我会更改,谢谢!


转载请注明出处。

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
6月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
254 11
|
7月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
389 18
|
7月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
639 17
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
12382 4
|
8月前
|
存储 数据采集 监控
ubuntu(linux)系统主要应用于哪些工业场景中?研维三防ubuntu系统的手持工业三防平板电脑在哪些行业中有实际应用
Ubuntu 系统凭借其独特的优势,在众多工业场景中得到了广泛应用,为工业数字化、智能化发展提供了有力支持。而研维三防基于 Ubuntu 定制系统的手持工业三防平板电脑,更是将 Ubuntu 系统的优势与工业级的性能、坚固耐用性完美结合,在电力、物流、制造等多个行业中展现出强大的应用价值,助力企业提高生产效率、优化管理流程、提升产品质量,成为推动工业现代化发展的重要力量。随着技术的不断进步与创新,相信 Ubuntu 系统以及研维三防这类工业级设备将在更多的工业领域中发挥更大的作用,为工业发展带来更多的机遇与变革。
|
10月前
|
Ubuntu 定位技术
Ubuntu 20.04应用部署:Beyond Compare 4.4.7安装教程
这样,你就成功在Ubuntu 20.04上安装了Beyond Compare 4.4.7。就像一个探险者,你有了罗盘,有了地图,熟能生巧,你就可以在未知的世界中探索,发现,享受这个过程。这是一次成功的探险,你做得很好!
1505 7
|
负载均衡 Ubuntu 应用服务中间件
nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
1805 13
|
监控 Ubuntu Linux
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
这篇文章介绍了如何在Ubuntu和Windows系统中通过设置相同的时区并使用ntp服务来解决时间同步问题。
438 4
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
1127 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
Ubuntu Linux C语言
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
本文介绍了在Ubuntu 18.04系统上编译安装OpenCV 3.4.0及其扩展包opencv_contrib 3.4.0的详细步骤,包括下载源码、安装依赖、配置CMake和编译安装,以及常见问题的解决方法。
1480 1
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0