概述

 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. java 基础 异常

    抛出异常 和 捕获异常案列 //异常方法的重写

  2. Java多线程编程核心技术(一)Java多线程技能

    1.进程和线程 一个程序就是一个进程,而一个程序中的多个任务则被称为线程. 进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位. 举个例子: 打开你的计算机上的任务管 ...

  3. python中各个response使用

    Python django中我们经常用的response有django中的 JsonResponse, HttpResponse,还有DRF中的Response 在使用的时候,经常会不知道如何什么时候 ...

  4. Python中Socket粘包问题的解决

    服务器端 import socket import subprocess import struct server = socket.socket() ip_port = ("192.168 ...

  5. ElasticSearch 分组查询的几个例子

    facets接口可以根据query返回统计数据,其中的 terms_stats 是分组统计,根据key的情况返回value的统计数据,类似group by的意思. "terms_stats& ...

  6. C#格式化字符串大全

    C#格式化字符串大全 分类: VS/C#         1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}" ...

  7. web网站css,js更新后客户浏览器缓存问题,需要刷新才能正常展示的解决办法

    问题描述 最近将公司官网样式进行了调整,部署到服务器后访问发现页面展示不正常,但是刷新之后就会展示正常. 问题分析 研究之后发现可能的原因有 css文件过大,加载缓慢 本地缓存问题,虽然服务器修改了c ...

  8. 【学习总结】Git学习-参考廖雪峰老师教程七-标签管理

    学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...

  9. JAVAString初始化的引用问题

    1 String a="Hello JAVA"; 2 3 String b=a; 4 5 System.out.println(a); 6 7 System.out.println ...

  10. 使用PL/SQL连接Oracle时报错ORA-12541: TNS: 无监听程序

    因公司需求,安装oracle数据库,oracle数据库用账号密码可以登录,然后在pl/sql里面不能登录,显示无监听程序. 这就说明可能有些服务没有启动,开始运行services.msc ,进入后寻找 ...