概述

 Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项
 针对PHP的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。
 在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式

实现动静分离的方式有三种:

  • 静态web服务放置在公网中
  • 静态web服务放置在代理服务器中
  • 静态web服务放置在内网的单独服务器上

常用的方案:在公网和 内网都提供静态页面处理的服务器

Nginx的正则匹配

常用的正则匹配规则

  ^~ : 标识符后面跟一个字符串。Nginx将在这个字符串匹配后停止进行正则表达式的匹配,如 location  ^~ /images/,它在匹配了/images/这个字符串后就停止搜索其它正则的location

  = : 标识精确查找地址,如 location = / ,只会匹配uri为/的请求

  ~ : 区分大小写的匹配

  ~* : 不区分大小写的匹配

  !~ : 对区分大小写的匹配取非

  !~* : 对不区分大小写的匹配取非

经常会用到的正则表达式有

  *   ?   +    .   ()     |     ^    $

特殊字符说明

  {n} : 重复n次

  {n,} :  重复n次或更多次

  {n,m} : 重复n到m次

  *? : 重复任意次,但尽可能少重复

  +? : 重复1次或更多次,但尽可能少重复

  ?? : 重复0次或1次,但尽可能少重复

  {n,m}? : 重复n到m次,但尽可能少重复

  {n,}? : 重复n次以上,但尽可能少重复

案例

说明:本案例(1)使用Nginx调度服务器做静态数据处理(2)使用内网中独立的Nginx服务器处理静态数据

1.使用Nginx调度处理静态数据(视频,图片,音乐等可视化数据),LAMP处理动态数据

(1)搭建LAMP主机

参考博客:http://www.cnblogs.com/zhichaoma/p/7487186.html

(2)配置Nginx调度服务器

搭建Nginx服务:参考博客:http://www.cnblogs.com/zhichaoma/p/7570210.html

在server{};段中加入以下代码

location ~ \.php$ {                                        #匹配以.php为结尾的动态页
  proxy_pass http://LAMP的IP地址(192.168.10.10); #proxy_xy 意思是代理交给谁
  }

检查配置文件是否正确并启动

nginx -t
nginx

将静态数据文件拷贝到Nginx服务的网站根目录下

location / {
root html; //可以在这里指定指定根目录
index index.html index.htm;
  }

这里将数据默认存放在 nginx/html/ 下

(3)在LAMP服务器上创建一个 test.php测试文件

<?php
echo "Welcome to My site"."<br/>";
echo "<img src='1.jpg'>";
?>

test.php

使用客户端访问Nginx调度服务器的IP地址,Nginx调度服务器会将php的请求转交给LAMP服务器处理,而静态数据(这里是一张图片)会从Nginx调度服务器中去取

2.使用内网中独立的Nginx的服务器处理静态数据

在server{};段中加入以下代码

location ~ \.php$ {                                        #匹配以.php为结尾的动态页
  proxy_pass http://LAMP的IP地址(192.168.10.10); #proxy_xy 意思是代理交给谁
  } location ~ .*\.(gif|jpg|jpeg|bmp|swf)$ { #这段代码意思是任意网址以这5种格式为结尾就到192.168.10.20服务器寻找资源
proxy_pass http://处理静态数据的Nginx的服务器的IP地址(192.168.10.20);
  }

将静态数据文件拷贝到Nginx服务的网站根目录下,检查配置文件,启动服务,使用客户机访问验证

Apache与Nginx动静分离的更多相关文章

  1. Nginx动静分离实现

    Nginx动静分离实现: Nginx是一种轻量级,高性能,多进程的Web服务器,非常适合作为静态资源的服务器使用,而动态的访问操作可以使用稳定的Apache.Tomcat及IIS等来实现,这里就以Ng ...

  2. Nginx动静分离架构

    Nginx动静分离简单来说就将动态与静态资源分开,不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat,Res ...

  3. Nginx 动静分离与负载均衡的实现

    一.前提 企业中,随着用户的增长,数据量也几乎成几何增长,数据越来越大,随之也就出现了各种应用的瓶颈问题. 问题出现了,我们就得想办法解决,一般网站环境,均会使用LAMP或者LNMP,而我们对于网站环 ...

  4. Nginx动静分离架构&&HA-LB集群整合

    Nginx动静分离简单来说就将动态与静态资源分开,不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat,Res ...

  5. Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用)

    一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好, ...

  6. Nginx动静分离经典

    Nginx:安装nginx之前需要安装pcre包和zlib以支持重写,正则以及网页压缩等等]把所需的包下载到/usr/src下[根据自己的习惯,路径可以改变]1.首先安装pcre: cd /usr/s ...

  7. Nginx动静分离

    动静分离 Nginx动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路. ...

  8. Nginx动静分离知识及配置

    Nginx动静分离知识及配置,本质上与分离上传下载功能是相同功能,本质就是在文件服务器也是需要部署WEB应用的,只是在进行代理分离的时候分配到对应的文件服务器上去. 随着Nginx高性能Web服务器大 ...

  9. Nginx动静分离(Nginx+Tomcat)

    第一步:nginx构建 第二步:Tomcat构建 1.Tomcat基础点 (1)Tomcat 是基于java开发的web容器,用来发布java代码和jsp网页. (2)开发人员开发java web网站 ...

随机推荐

  1. git创建新分支

    1.创建本地分支 git branch 分支名,例如:git branch 2.0.1.20120806 注:2.0.1.20120806是分支名称,可以随便定义.   2.切换本地分支 git ch ...

  2. 【转】【强化学习】Deep Q Network(DQN)算法详解

    原文地址:https://blog.csdn.net/qq_30615903/article/details/80744083 DQN(Deep Q-Learning)是将深度学习deeplearni ...

  3. IIS配置Url重写实现http自动跳转https的重定向方法(100%解决)

    引言 本文推荐阅读地址:https://www.52abp.com/BlogDetails/10008 这种文章网上可以说一搜一大把,但是我为什么还要写呢,因为一搜一把没把我气死,都是东抄西挪的东西, ...

  4. xadmin的使用

    01-下载源码 GitHub地址:https://github.com/sshwsfc/xadmin # 安装xadmin 由于使用的是Django2.0的版本,所以需要安装xadmin项目djang ...

  5. windows安装Redis和客户端

    一.Windows安装Redis 1.下载安装包Redis-x64-3.0.504.zip到本地 2.解压 3.打开CMD,切换到解压后的redis目录,然后 C:\Users\Administrat ...

  6. C++常用代码优化策略

    C++代码常用的优化策略 1.不存在指向空值的引用,意味着引用比指针的效率更高,因为在使用引用之前不需要测试它的合法性:指针可以被重新赋值以指向另一个不同的对象,但是引用总是指向它初始化时指定的对象. ...

  7. python学习第十篇——while 的灵活运用

    sandwiches_orders = ['apple','banana','mango',"apple","watermelon"] finished_san ...

  8. 使用faker去构造一个User-Agent

    faker可以仿造各种各样的信息,可以使用faker去构造一个User-Agent from faker import Factory f = Factory.create() 'User-Agent ...

  9. Day7 Ubantu学习(一)

    Linux是多用户操作系统 Ubantu学习参考网址:https://www.cnblogs.com/resn/p/5800922.html 1.虚拟机网络类型的理解 bridged(桥接模式) : ...

  10. jenkins+maven+tomcat集群发布

    jenkins+Gitlab+maven+tomcat实现自动集成.打包.部署 - 李栋94 - 博客园https://www.cnblogs.com/lidong94/p/7427923.html ...