Andy's Blog » php 反向代理, php反向代理, 反向代理 php, curl 反向代理, php curl 反向代理, php反代, php实现反向代理, php 反向代理 提示文件不存在, php 反代, php 实现反向代理, curl反向代理, PHP Secache 配置, php 域名反向代理 seo, php curl secache 实现, php curl 反代, curl反代 » 用 PHP + curl + secache 替代 Nginx 的反向代理功能

用 PHP + curl + secache 替代 Nginx 的反向代理功能

用 PHP + curl + secache + memcached 替代 Nginx 的反向代理功能

原文作者:21Andy.com
转载请完整保留文内容及链接 http://www.21andy.com/new/20120830/2095.html

昨天刚重新写完了一个 php 反向代理+缓存控制的程序,功能很完善了,记录一下

Nginx 自身的反向代理功能速度很快,但是存在缺点
1. 不能只存储 gzip 压缩内容,再根据客户端请求发送 gzip 或非 gzip内容
2. 根据不同 URI 请求结构设置不同缓存时间,配置文件要写很长,管理不便
3. 缓存大小虽然可以控制,但清理机制还是离不开PHP等程序

所以,我自行用PHP写了,功能类似以前很流行的小偷程序,不过偷的是自己的内容
源码就不放了,以免有人拿去干坏事

记录一下几个要点
1. php + curl + secache 实现
lru算法可实现缓存总体大小控制,有效利用空间,如一个20G的VPS,可以刚好控制在18G,呵呵

2. 反代时注意 post 请求和 cookie
cookie 从客户端接受,然后请求反代服务端,得到cookie以后,再设置给客户端

3. 缓存时间和缓存存储结构
根据不同 URI 设置不同缓存时间控制,如

array(
'post' => 60,
'list' => 1440,
);

缓存文件名
GET 请求为 domain + uri 的MD5值,取前几位分目录
POST 请求视情况,也许不缓存

缓存文件存储结构
1 层目录结构共 16 个目录, /cache/a/ /cache/0/
2 层目录结构共 256 个目录,/cache/ab/ /cache/01/
3 层目录结构共 4096 个目录, /cache/a/bc/ /cache/0/12/
4 层目录结构共 65536 个目录 /cache/ab/cd/ /cache/01/23/

用以保证每个目录内不超过1000个文件或目录
1 层目录,可以支持 16,000 个文件
2 层目录,可以支持 256,000 个文件
3 层目录,可以支持 4,096,000 个文件
4 层目录,可以支持 65,536,000 个文件

为避免过多文件数量及控制容量,使用secache存储时情况下如:
每个文件 1MB,1 位文件,共 16 个,总大小 16 MB
每个文件 1MB,2 位文件 共 256 个,总大小 256 MB
每个文件 1MB,3 位文件 共 4096 个,总大小 4096 MB = 4G

每个文件 10MB,1 位文件,共 16 个,总大小 160 MB = 0.16G
每个文件 10MB,2 位文件 共 256 个,总大小 2,560 MB = 2.5G
每个文件 10MB,3 位文件 共 4096 个,总大小 40,960 MB = 40G

每个文件 100MB,1 位文件,共 16 个,总大小 1,600 MB = 1.6G
每个文件 100MB,2 位文件 共 256 个,总大小 25,600 MB = 25G
每个文件 100MB,3 位文件 共 4096 个,总大小 409,600 MB = 400G

4. 配合 Nginx 的 SSI,以减少多个缓存页面内的相同内容
gzip + ssi 后,有效降低空间占用

5. 模拟 Nginx 的内存缓存
以 URI 访问计数统计,取TOP N个,存储 memcached,也可以APC

6. 增加一个config设置界面,以文本文件 + APC 存储
用以设置 uri 缓存时间,压缩级别,目录结构,过滤替换等

Incoming search terms:

Tags: nginx, PHP, curl, secache, 反向代理

本文地址: http://www.21andy.com/new/20120830/2095.html

12 评论 to “PHP开源CMS之MODx”

  1. 最近电影 于 2012-08-31 09:24:04 发表:

    终于放来了,学习中!

  2. 猪的头啦 于 2012-08-31 12:50:29 发表:

    想法很别致,但是实际应用是不是可行,有测试过吗?

    andy 于 2012-09-01 22:14:06 回复:

    使用中, 没有问题, 比nginx的反代缓存系统好用, 主要是功能多, 易管理

  3. unlearn.cn 于 2012-08-31 13:24:55 发表:

    博主有没有好用的vpn给推荐一个吧,谢谢

  4. jojo 于 2012-09-24 17:46:39 发表:

    请教一个问题:如何保证缓存的正确性?
    我目前用nginx搭建反向代理服务器,会碰到一个问题:有时从后端存储取数据时,如果网络不稳定则取到的文件是不完整的,而这个文件被代理服务器缓存下来后,其他用户继续请求这个url还是会得到不完整的缓存文件。。。
    这个问题如何解决呢?博主有考虑过么?谢谢。

    Andy 于 2012-10-09 13:09:31 回复:

    后端发送文件长度,前端检查文件长度

    jojo 于 2012-10-16 13:41:54 回复:

    我也是这个思路,不过nginx缓存是通过配置实现的,怎么实现检查文件长度后再缓存呢?

  5. 于 2012-09-25 00:53:57 发表:

    复杂到不行,新手表示很无奈

  6. Yao-Cheng 于 2012-11-15 01:50:26 发表:

    您好
    能不能像您購買 code ?
    謝謝

  7. rui 于 2012-12-25 08:47:14 发表:

    我想购买这个code,能联系我吗?

  8. zzppp 于 2013-01-09 13:00:25 发表:

    博主好。什么好东西分享下 。放着不会升值的。

  9. 雨幻 于 2014-07-25 10:41:04 发表:

    博主,由于备案的原因,我需要用PHP反代,以前用7GHOST的,但是它没有缓存(经过测试,确实没有),速度不尽如人意,不知道博主可否共享一下你的CODE,感激不尽