文章目录

  • 0. 引言
  • 1. 动静分离
    • 1.1 何为动静分离
    • 1.2 动静分离目的
  • 2. 如何配置
    • 2.1 资源准备
    • 2.2 进行 Nginx 配置
    • 2.3 测试结果
  • 3. location
  • 4. UrlRewrite路径重写

0. 引言

下面学习一下Nginx的动静分离如何配置。在学习之前,如果没有LinuxNginx环境,或者想看一下反向代理和负载均衡如何配置,可以参考下面文章。

VirtualBox安装Centos7

在Centos7下安装Nginx

Nginx配置——反向代理

Nginx配置——负载均衡

1. 动静分离

1.1 何为动静分离

Nginx动静分离,简单来说,就是动态请求和静态请求分开,也可以理解成使用Nginx处理静态页面,Tomcat 处理动态页面,动静分离从目前实现角度来讲大致分为两种。

  • 纯粹把静态文件独立成单独的域名,放在独立的服务器上(主流推崇的方案)
  • 动态跟静态文件混合在一起发布,通过Nginx来分开

通过location指定不同的后缀名实现不同的请求转发,也可以通过expires参数设置,使浏览器缓存文件的过期时间,从而减少与服务器之前的请求和流量。

Expires具体含义:给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,也就是所谓的客户端缓存。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires来缓存),假设一下,把这个Expires设置3d,表示在3天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码 200

1.2 动静分离目的

为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,来加快解析速度,提高请求的访问效率,降低原来单个服务器的压力,下面是动静分离的原理图。

2. 如何配置

2.1 资源准备

2.2 进行 Nginx 配置

找到Nginx安装目录,打开/conf/nginx.conf配置文件

http {……server {listen       80;server_name  192.168.17.129;location /www/ {root /data/;index    index.html index.htm;}location /image/ {root    /data/;autoindex    on; // 列出访问目录}}
}

上面的配置,就是当请求是以/www/开始的,则进入/www/data/目录下找资源,如果是以/image/开始的,则进入/image/data/目录下找资源,同时该路径下配置了一个autoindex on,当访问/image/目录时,会列出该目录下的所有文件

修改完配置文件后,记得重启Nginx

2.3 测试结果

浏览器中输入地址:http://192.168.17.129/image/01.jpg

浏览器中输入地址:http://192.168.17.129/image/

因为配置了autoindex on

浏览器地址栏输入地址:http://192.168.17.129/www/a.html

3. location

location前缀可以使用正则表达式

  • /通用匹配,任何请求都会匹配到
  • =精准匹配,不是以指定模式开头
  • ~正则匹配,区分大小写
  • ~*正则匹配,不区分大小写
  • ^~非正则匹配,匹配以指定模式开头的location

location匹配顺序

  • 多个正则,location直接按书写顺序匹配,成功后就不会继续往后面匹配
  • 普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
  • 当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
  • 所有类型location存在时,=匹配 > ^~匹配 > 正则匹配 > 普通(最大前缀匹配)
location ~*/(css|img|js) {root /usr/local/nginx/static;index index.html index.htm;
}

aliasroot区别

location /css {alias /usr/local/nginx/static/css;index index.html index.htm;
}

root用来设置根目录,而alias在接受请求时在路径上不会加上location

  • alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的
  • root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的
  • 使用alias标签的目录块中不能使用rewritebreak,另外,alias指定的目录后面必须要加上/符号!
  • alias虚拟目录配置中,location匹配的path目录如果后面不带/,那么访问的url地址中这个path目录后面加不加/不影响访问,访问时它会自动加上/,但是如果location匹配的path目录后面加上/,那么访问的url地址中这个path目录必须要加上/,访问时它不会自动加上/,如果不加上/,访问就会失败!
  • root目录配置中,location匹配的path目录后面带不带/,都不会影响访问

4. UrlRewrite路径重写

rewrite是实现URL重写的关键指令,根据regex 部分内容,重定向到replacement,结尾是flag标记,语法如下:

rewrite  <regex>   <replacement> [flag];
关键字     正则      替代内容        flag标记
  • 关键字:不能改变
  • 正则:perl兼容正则表达式语句进行规则匹配
  • 替代内容:将正则匹配的内容替换成replacement
  • flag标记:rewrite支持的flag标记
    • last:本条规则匹配完成后,继续向下匹配新的location URI规则
    • break:本条规则匹配完成即终止,不再匹配后面的任何规则
    • redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
    • permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
  • rewrite参数的标签段位置:serverlocationif

示例

# 将0-9.html的请求路径,重写为/index.jsp页面
rewrite ^/([0-9]+).html /index.jsp?pageNum=1 break;

Nginx配置——动静分离相关推荐

  1. Nginx——配置动静分离

    Nginx的动静分离是把不同的资源放到不同的服务器中,动态资源可以放到tomcat中,而静态资源可以放到其他位置 所谓动静分离,是为了加快网站的解析速度,把动态页面和静态页面分别部署到不同的服务器上来 ...

  2. nginx配置动静分离

    原理:静态页面和里面的图片js资源有很多,如果这些都放到tomcat服务器,nginx每次都要转发反向代理.把一些今天资源和图片.js代码放到nginx服务器上就节省很多资源. 以前的做法:都放到to ...

  3. nginx配置动静分离简单配置示例

  4. nginx php分离,nginx-php配置动静分离

    实验目的:nginx-php配置动静分离 实验环境: 主机 192.168.88.100 NGINX服务器 主机 192.168.88.102 PHP和MYSQL服务器 注意:想要手工编译必须安装gc ...

  5. Docker构建Nginx+Tomcat动静分离架构

    随着主流Nginx WEB服务器的发展,现在基于Nginx的WEB服务器已广泛应用于各大互联网企业.今天我们来使用docker构建我们的Linux+Nginx+Tomcat动静分离服务器. 1)    ...

  6. nginx+tomcat动静分离结构

    本文采用另一种策略对动静分离进行演示,它的大致结构如图 2 所示. 图 2. 本文设计的动静分离结构 在本文中,我们将静态资源放在 A 主机的一个目录上,将动态程序放在 B 主机上,同时在 A 上安装 ...

  7. tomcat 如何跳转到apache_第二十期:基于tomcat部署jforum站点,并结合nginx实现动静分离...

    一.  基于tomcat部署站点,并nginx实现动静分离 1.1  Tomcat部署 1.1.1  配置jdk #二进制安装 #解压 [root@node2local]# tar -xzvf jdk ...

  8. K8S高可用集群架构部署 dashborad插件部署 Nginx实现动静分离 K8S在线升级

    K8S官方文档 注意:该集群每个master节点都默认由kubeadm生成了etcd容器,组成etcd集群.正常使用集群,etcd的集群不能超过一半为down状态. docker的namespace: ...

  9. 使用nginx实现动静分离的负载均衡集群

    架构图 本次要实现的架构图: 工作中我们希望这样: 静态文件处理:可以使用nginx 或apache 动文件处理: apache ,tomcat 图片文件处理: squid 我们可以使用nginx实现 ...

最新文章

  1. insert into与insert ignore以及replace into的区别
  2. 【怎样写代码】复杂对象的组装与创建 -- 建造者模式(四):扩展案例
  3. 关于Redux的一些总结(一):Action 中间件 异步
  4. java script 月日年转年月日_js的如何进行日期格式转换成年月日
  5. 怎么修照片多余的部分_PS教程旧照片翻新修复技巧
  6. Spring Cloud Netflix Eureka 配置参数说明
  7. Silverlight 置于悬浮层之下 背景透明的方法
  8. [云炬python学习笔记]Numpy中内置函数min(),max(),sum()与Python中内置函数min(),max(),sum()性能对比分析
  9. JAVA 类加载机制学习笔记
  10. 将js对象转化为树形结构
  11. Golang的context理解
  12. python后台架构Django教程——项目配置setting
  13. linux定时器的实现方法
  14. CRC 8/16/32通用算法(C 语言版)
  15. hprose-php教程,PHP RPC框架 hprose 上手玩玩
  16. access 英语什么意思_access是什么意思_access怎么读_access翻译_用法_发音_词组_同反义词_入口_出口-新东方在线英语词典...
  17. 计算机组装中如何看硬件型号,如何查看主板型号?(三种方法!)
  18. 小米手环6获取auth_key更换第三方表盘(零基础)
  19. Python介绍(15)
  20. 应用楼宇自控系统降低建筑物设备成本

热门文章

  1. mkdirs php失败,mkdirs() 总失败,怎么办,多半...
  2. 第 3-3 课:狼、羊、菜和农夫过河问题
  3. 第161章 SQL函数 YEAR
  4. JDBC及Druid
  5. IDEA 技巧 快速取消断点调试
  6. 恒压板框过滤实验数据处理_如何提高板框压滤的工作效能?
  7. 一名七年老安卓的一二月小结
  8. 使用funshionchart技术总结
  9. js实现天猫淘宝购物放大镜效果
  10. java代码启动电脑相机_如何使用java启用电脑的摄像头摄相拍照