admin

一个php反向代理程序(php-reverse-proxy)的必要性和需求
反向代理(Reverse Proxy) 就是接受用户的请求,然后发送给后端服务器,然后再把后端服务器的处理内容反馈...
扫描右侧二维码阅读全文
21
2017/08

一个php反向代理程序(php-reverse-proxy)的必要性和需求

反向代理(Reverse Proxy) 就是接受用户的请求,然后发送给后端服务器,然后再把后端服务器的处理内容反馈给用户。目前用的毕竟多的是nginx吧,简单高效。但是多时候,我们并没有独立服务器用,可能是一个小小的php空间。
它能做的:用一个虚拟主机,完成代理访问。镜像一个网站。ip被封锁的时候,低成本应急开通访问地址。那么它应该有的功能。
之前用过7ghost 很久不更新了哦。各种不兼容和bug。
为为什么想要做这个?

首先是因为没有合适的程序用
前然后。多年前做站,自己辛苦写的代码和整理的数据。放在虚拟主机或者vps上,被人直接copy掉了。所以反向代理是最能解决这个问题的。
还还有就是虚拟的性能真的堪忧,简单的应用可以应付,复杂的数据使用,直接崩了,轻则打不开,重了被商家封掉。
这个程序也会被人拿走,数据也会,但是只是公开的静态页面而已。你网站被人wget -m一下,不是也会被镜像掉。这个程序不是解决这个问题而存在的。不要本末倒置。
你可以用它镜像别人的站的公开内容。也可以用它来保护自己的站。随便吧。
如果你有外网ip,或者可以做内网穿透,没有80端口没关系,这都可以帮你反向代理出去。

基于这个需求,催生了这个小项目。并且会开源共享出来。

1/ 尽量避免依赖固定函数,应该依次 curl /file_get_contents /fopen(allow_url_fopen)/Fsockopen
2/ 多域名模式 多站点模式 域名判断 和 l_siteid
2.1/ 基于域名可以访问,为了简单期间 附加域名应该重定向到主域名
2.2/ 基于l_siteid 可以访问
2.3/ 分组管理,一个主站下 可关联多个域名规则(外部url)
3/ 技术数据库和文件的缓存方式
3.1 基于文件的方式会导致大量碎片文件,好像得不偿失,sqlite分库

   3.1.1 sqlite分库 采用索引 加 分库,索引里面标注库名和id (md5的第一位0或者N位  /index/n-1/n-2/b.sqite)
   3.1.2 索引库 用md5分,默认不分 index.sqlite,1位 index/a.sqlite 2位 index/a/b.sqlite
   3.1.3 内容库 插入入之前先查询数据库大小和当前内容,限定单个数据的大小
   3.1.3 更新缓存 可能会导致之前的数据库变大,所以更新缓存的时候 要删除之前的记录。

3.2 基于mysql(没有百万级别的数据,意义不大,暂时搁置)
3.3 基于oss/COS/upyun等储存(后期 可以试试oss和cos)
4/ 缓存的刷新机制
4.1 手动更新: url末尾加 &lyh_update=key 自动更新。key是更新密钥,默认是1或者yes
4.2 自动更新机制:

    4.2.1 不同后缀更新时间不同:img css js 类,就是url规则设定,设定过期时间
    4.2.2 设置url规则的更新时间,例如url包含 login、update、post、save等单独设置更新时间<rar/flv之类的不索引>
    4.2.3 单个文件大于多少字节的不索引

5/ 限制缓存条数
5.1 按照访问次数排序 次数多的缓存,排名之外的,删除

初始版本应该实现的功能
1、pdo.sqlite数据库
2、多域名 树形
3、兼容阿里云的弹性web PHP 5.2.17/ fsockopen
4、单一库功能,或者分库
目录结构
index.php
_core <admin|system site.sqlite>
_cache/{siteid}/<index|content>.<num>.sqlite

数据库结构
----system 系统管理---
admin user(后台用户)
admin psw(后台密码)
sqlite_name单个sqlite文件大小
---site站点管理----
siteid(站点id)
name(站点名称/后台用)
domain(绑定域名)
url(代理地址)
replace_rule(html替换规则)
url_cache_rule(基于地址的缓存规则)
filesize_limt(过大的文件不缓存)
is_debug(调试模式)
----urlindex 地址索引管理----
url_id
url_hase(urlmd5码)
updatetime(保存时间戳)
count(pv次数)
----content----
url_id
url_content

Last modification:October 13th, 2018 at 10:08 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

captcha
请输入验证码