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

匿名 (未验证) 提交于 2019-12-02 21:56:30

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

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

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

说明

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

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

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

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

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

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

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

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

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

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

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

虚拟目录

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

<Context path="/pimg" docBase="/home/pimg" debug="0" privileged="true" reloadable="true"/>

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

path="/pimg"docBase="/home/pimg"

/pimg/aa.jpg/home/pimg/aa.jpg

/pimg/home/pimg

www.daibu.cn:8080/pimg/aa.jpg

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

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

Nginx的匹配规则

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

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

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

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

解读配置文件

我的demo访问地址是http://www.daibu.cn:8080/sssmshop

目录结构如下

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

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

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

  server {               listen       80;                server_name  www.daibu.cn;                                  location / {                   proxy_pass    http://www.daibu.cn:8080;               }                   #所有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    http://www.daibu.cn:8080;              # }    }   

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

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

server_name

location / { proxy_pass http://www.daibu.cn:8080; }

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

root /usr/share/nginx/jdfenli,这是我们自己随便找个地方建的文件夹,

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

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

root /usr/share/nginx/jdfenli

www.daibu.cn替换成/usr/share/nginx/jdfenli。

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

整体而言差不多这样就能分离开来了,如果有问题可以联系我。

提醒

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

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

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

    

文章来源: https://www.cnblogs.com/yellowgg/p/11241022.html
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!