一、介绍
把所有静态资源的访问改为访问 nginx,而不是访问 tomcat,这种方式叫静态代理。
因为 nginx 更擅长于静态资源的处理,性能更好,效率更高,所以在实际应用中,我们将静态资源比如图片、css、html、js 等交给nginx处理,而不是由 tomcat 处理。
二、Nginx 静态代理实现方式
1. 方式一
在 nginx.conf 的 location 中配置静态资源的后缀
例如 :当访问静态资源,则从 linux 服务器 /opt/static 目录下获取
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
root /opt/static;
}
说明 :
~
表示正则匹配,也就是说后面的内容可以是正则表达式匹配- 第一个点
.
表示任意字符 *
表示一个或多个字符\.
是转移字符,是后面这个点的转移字符|
表示或者$
表示结尾
整个配置表示以 . 后面括号里面的这些后缀结尾的文件都由 nginx 处理,放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限,否则会出现403错误
修改权限 :chmod 755
2. 方式二
在 nginx.conf 的location中配置静态资源所在目录实现
location ~ .*/(css|js|img|images) {
root /opt/static;
}
匹配的是 :
xxx/css
xxx/js
xxx/img
xxx/images
我们将静态资源放入 /opt/static 目录下,然后用户访问时由 nginx 返回这些静态资源
三、案例
我们先通过 nginx 访问上一篇文章 myweb 项目中的图片
修改 nginx.conf 文件,在 location 中配置对静态资源的拦截,如果是静态资源,就交给
nginx 处理。
启动 nginx
浏览器访问 nginx 服务器,进行测试,发现图片无法加载,如图片加载可能是浏览器缓存的问题。
因为我们在 nginx 中配置了对 .jpg 的拦截,所以请求会交给 nginx 服务器进行处理。
根据 ip + port 等于 root 的原则,我们会去 /opt/static/myweb 目录下找资源,所以在 /opt/static 下创建 myweb 目录,并放入 image 目录及图片,为了和 tomcat 上的图片区分,我们这里图片的内容发生了变化。
浏览器访问 nginx 访问器,进行测试 ,图片访问正常,而且访问的是 nginx 上的图片。
将 nginx.conf 中的 location 拦截方式修改为拦截静态文件目录的方式、
重启nginx服务器,通过浏览器访问nginx服务器,进行测试,访问正常,但是访问的是tomcat 服务器下的图片
因为我们配置的拦截的目录为 /images,请求的图片目录是 /image,这样拦截不到。
但是反过来,如果我们配置拦截的目录为 /imag,请求的图片目录为 /image,这样可以拦截到。所有我们需要将 location 的 /images 修改为 /image。所以一般我们用方式一,匹配静态资源后缀的方式更好一下,防止 js 拦截 jsp 目录。