Nginx apache纯静态伪静态原理与实现方案

参考文档

防盗链

http://blog.csdn.net/pestd/article/details/6554410

ob缓冲机制深入理解

http://www.jb51.net/article/70477.htm

伪静态

http://www.phpstudy.net/a.php/165.html

真静态实现的4中方法

http://www.jb51.net/article/74342.htm

nginx配置pathinfo的方法

http://blog.csdn.net/pangchengyong0724/article/details/51433440

大文件删除

http://www.jb51.net/LINUXjishu/405027.html

http://www.jb51.net/LINUXjishu/405042.html

http://www.jb51.net/article/46496.htm

 

针对这个问题我们从三方面来分析

1.它是什么

2.它能干什么

3.   它怎么用

 

 

伪静态

1.      伪静态是什么?


a.伪静态是相对于真静态而言的,就是把一些asp,php等结尾url通过apche或nginx的重写规则,变成以html一类的静态页面形式。

b.伪静态不是真正的静态,它和动态地址一样要读取数据库。

伪静态

1.      伪静态能干什么?

a.伪静态最主要的作用就是利于seo,百度蜘蛛喜欢抓取静态页面。?容易使百度spider陷入死循环

b.但是并发量高的时候会加大服务器的压力,所以用的时候要注意。

 伪静态

 

3.伪静态怎么用?

伪静态就是利用apche,nginx重写规则,对url地址重写实现的

实现原理

a.打开apache的重写模( mod_rewrite.so)

b.Nginx默认支持伪静态

配置方式有两种

a.在配置虚拟主机的时候设置

b.在项目的根目录下建一个.htaccess文件在里面配置

真静态

1.真静态是什么?

网站设计 中,纯粹 HTML 标准通用标记语言 下的一个应用)格式的网页通常被称为 静态 网页 ,静态网页是标准的 HTML 文件,它的文件扩展名是 . htm . html ,可以包含 文本 、图像、声音、 FLASH 动画、客户端脚本和 ActiveX 控件及 JAVA 小程序等。静态网页是网站建设的基础,早期的网站一般都是由静态网页制作的。静态网页是相对于 动态网页 而言,是指没有 后台数据库 、不含程序和不可交互的网页。静态网页相对更新起来比较麻烦,适用于一般更新较少的展示型网站。容易误解的是静态页面都是 htm 这类页面,实际上静态也不是完全静态,他也可以出现各种动态的效果,如 GIF 格式的动画、 FLASH 、滚动字幕等


真静态

2.真静态能干什么?

大型的项目优化中经常会考虑到,在访问量大的时候,可以减少cpu的压力,但是会生成大量的文件占用网站的磁盘空间,可以写个php的脚本或用linux的计划任务进行删除。在用真静态的时候有的时候需要用到局部的动态化。

真静态

3.真静态怎么用?

原理

a.ob缓冲(output_buffering)

Echo print_f()与之的区别

echo、print_r=>phpoutput_buffering=>webServer buffer=>browser buffer=>browser display

缓冲和缓存的理解。

1.缓存解决cup消耗的问题,2.缓冲解决高速cpu和低速i/O不匹配的问题

b.模板替换(smarty原理实现网页静态化)

1、通过URL传递一个参数(ID);
2、然后根据此ID查询数据库;
3、取得数据后根据需要修改显示内容;($str=str_replace('{$title}',$title,$str);)

4、显示模板

页面静态化在1之前使用 ob_start() 打开缓冲区,在4之后使用 ob_get_contents() 获取内存未输出内容,最后file_put_contents();写入指定文件

c.局部动态化

Ajax技术,页面加载请求php页面

d.定时任务

真静态

3.真静态怎么用?

实现方法:

1.利用PHP模板生成静态页面

2.使用PHP文件读写功能生成静态页面

3.使用PHP输出控制函数(Output Control)/ob缓存机制生成静态页面

 4.使用nosql从内存中读取内容(其实这个已经不算静态化了而是缓存);

 memcached是键值一一对应,key默认最大不能超过128个字节,value默认大小是1M,因此1M大小满足大多数网页大小的存储。

真静态和伪静态的区别?

1.      是不是一个真正静态页面

2.      有没有和数据库或后台程序进行交互

3.      它们的应用场景和解决的问题不同

4.      用javascript:alert(document.lastModified)来判断是真静态还是伪静态

真静态在apache和nginx上的区别与否

                     1.真静态在nginx上的运行速度比apache运行速度快

                      2.nginx处理静态文件对于apache来说消耗的内存少

 

伪静态在apache和nginx上的区别与否

1.本质上没有区别都是根据正则匹配对应的url的重写,apache和nginx上的伪静态规则有点不同。写的时候要注意

2.apache处理伪静态比nginx更有优势

 

 

 

 

 

演示

              真静态,伪静态apache的实现演示

1.      真静态的实现方案ob缓存

 // 新闻详情页

  public function sta(){

     // $uri=$this->uri->segment_array();

     $id=$this->input->get('id','');

    // echo $id;die;

     $ob="./app/cache/ob".$id.".html";

     $oldtime=file_exists($ob)?filemtime($ob):0;

     if (file_exists($ob)&&(time()-$oldtime<60)) {

       echo "缓存";

      $ob=file_get_contents($ob);

      echo $ob;

     }else{

 

       echo "数据库";

     // $pdo=new  PDO('mysql:host=localhost;dbname=demo01;port=3306','root','root');

     // $pdo->exec("set names utf8");

     // $sql="select* from test4 where id=$id";

     // $res=$pdo->query("$sql")->fetch(PDO::FETCH_ASSOC);

       $res=$this->db->get_where('test4',[id=>$id])->result_array();

     // var_dump($res);die;

     $data['res']=$res;

 

     ob_start();

     $this->load->view('sta.html',$data);

     $str=ob_get_contents();

     // echo $str;die;

     file_put_contents($ob, $str);

    

 

   }

2.      真静态的实现方案memcache

      function pic(){

 

       

        $pic_statis_content = "content";

        $expr = 3600*24*10;//有效期,十天

        $mem = new Memcache;

 

        $mem->connect('127.0.0.1', 11211);

        $mem_pic_content = $mem->get($pic_statis_content); 

        if($mem_pic_content){

         echo $mem_pic_content;

        // $mem->delete("$pic_statis_content");

        }else{

                echo '非缓存';

            ob_start();

         

 

        $name='世界上最好的编程语言';

        $this->load->view('pic',['name'=>$name]);

         

         $content = ob_get_contents();//把详情页内容赋值给$content变量

         $mem->add($pic_statis_content,$content,false, $expr);

          ob_end_flush();//输出商品详情页信息

         

        }

 

 

      }

Apache伪静态实现地址重写及防盗链技术

 

 #开启重写引擎

  #RewriteEngine on

  RewriteRule 1.html  /1.php [L]

  #写重写规则

  #RewriteRule   cat_(\d+)t.html   /index.php/user/index/$1 [L,NC]

  RewriteRule   c(\d+)_(.*).html   /index.php?c=user&m=index&id=$1&title=$2[L,NC]

  #RewriteRule   cat_index.html   /index.php/user/index [L,NC]

  RewriteCond %{HTTP_REFERER} !^$ [NC]

  RewriteCond %{HTTP_REFERER} !sta.com [NC]

  RewriteRule .(jpg|gif|png|bmp|swf|jpeg) http://sta.com/app/public/dt/dt.jpg [L,NC,R=301]

 

 

 

真静态,伪静态nginx的实现演示

 

1.nginx伪静态实现地址重写和防盗链

//防盗链

             location ~* \.(gif|jpg|png)$ {

          valid_referers none blocked http://sta1.com:81;    //允许访问的来源

          if ($invalid_referer) {

            rewrite ^/ http://sta1.com:81/c2_.html;

            #return 403;

          }

        }

 

//伪静态地址重写

   location / {

 

       rewrite c(\d+)_(.*).html /index.php?c=user&m=index&id=$1&title=$2last;

        root  /usr/share/nginx/html/sta;

         index index.html index.htm  index.php  ;

    }

 

Nginx引入.Htaccess

include /usr/www/.htaccess

 

让nginx支持pathinfo模式的方式

   location ~ \.php(.*)$ { # 正则匹配.php后的pathinfo部分

       root           html/;

        fastcgi_pass   127.0.0.1:9000;

       fastcgi_index  index.php;

       fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/stest1/$fastcgi_script_name;

        fastcgi_param PATH_INFO $1; # 把pathinfo部分赋给PATH_INFO变量

       include        fastcgi_params;

    }

 

rsync删除

1、建立一个空目录

mkdir -p lpf/tmp/

2、确立需要清空的目标目录

/lpf/tmp1/

3、使用rsync同步删除(注意目录后面的“/”),整体效率会快一个数量级的样子。

rsync --delete-before -a -H /root/lpf/tmp/ /root/lpf/tmp1/

选项说明:

–delete-before 接收者在传输之前进行删除操作

–progress 在传输时显示传输过程

-a 归档模式,表示以递归方式传输文件,并保持所有文件属性

-H 保持硬连接的文件

-v 详细输出模式

-stats 给出某些文件的传输状态

一般我们不需要显示进度,使用以下命令即可

rsync --delete-before -a -H /root/lpf/tmp/ /root/lpf/tmp1/

把某个文件删掉

1 建立空文件/tmp1/em.txt

2 rsync --delete-before -a -H -v --progress --stats /root/lpf/tmp//root/lpf/tmp1/ 

3 这样置为空后就可以快速删掉

原理:把文件系统的目录与书籍的目录做类比,rm删除内容时,将目录的每一个条目逐个删除(unlink),需要循环重复操作很多次;rsync删除内容时,建立好新的空目录,替换掉老目录,基本没开销。

测试大文件删除

1.生成文件

for i in $(seq 1 500000); do echo test>>$i.txt; done

 10万文件rm删除第一次11s左右,第二次9s左右;  time rm -f *.txt     rsync测试两次9s左右

     50万文件rm删除报错;    rsync测试两次一个5分左右,一个4分左右                                   

 

Ci框架普通模式和pathinfo模式的切换

可以在 application/config/config.php 文件中进行设置。如果你打开 config 文件可以看到如下内容:

$config['enable_query_strings']= FALSE;
$config['controller_trigger']= 'c'; //控制器名
$config['function_trigger']= 'm'; //方法名
$config['directory_trigger']='d';//若控制器在子目录下,url中需带有这个参数,指定控制器所在子目录名称

如果你将 enable_query_strings更改为 TRUE ,那么普通模式就被激活了。此时,你就可以通过关键字来调用需要的控制器和方法了:控制器和方法名可以自己定义
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值