51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

PHP实现简易反向代理

最近使用Ward搭建了一个服务器状态监控的面板,非常的好看

Ward

由于本站是直接搭建在本地的物理服务器上的,并且使用了内网穿透的方式大家才能访问,而Ward是用docker跑起来的,映射了本地服务器的4000端口,每次想添加一个域名映射到服务器上需要单独新建一个隧道,由于本人巨懒,所以就不想新建隧道了,打算直接用反向代理的方式直接将Ward映射到子目录: ELEC Server (kezez.com) ,于是就搜索了一下有没有php直接反向代理的方式,结果还真的被我找到了,本文的实现方式采用了Mayx博主的方法,原文链接: 如何用PHP制作一个简单的反向代理 | Mayx的博客 (mabbs.github.io)

实现方式

首先,创建一个子目录: /lab/status/ , 这样可以直接通过这个链接访问: https://www.kezez.com/lab/status/
然后在子目录创建一个index.php文件,内容如下:

                            <?php

function removePrefixIfStartsWith($str, $prefix) {
// 检查字符串是否以指定前缀开头
if (strpos($str, $prefix) === 0) {
// 如果是,则删除前缀并返回新的字符串
return substr($str, strlen($prefix));
} else {
// 如果不是则直接返回原字符串
return $str;
}
}


$string = $_SERVER\['REQUEST_URI'\];


$outputString = removePrefixIfStartsWith($string, "/lab/status");


$content = file_get_contents("http://192.168.0.2:4000".$outputString);

`foreach ($http_response_header as $header) {
header($header);
}
if ($content) {
echo $content;
}
else
{
echo "404";`
`
}
`

这个时候,简易的反代已经创建好了,接下来需要将 /lab/status/ 路径下的所有请求转发到index.php来处理,由于目前本站是直接用的typecho的apache docker镜像,环境是基于apache的,所以直接在同级目录创建一个 .htaccess 文件,并写下如下内容:

                            RewriteEngine On
RewriteBase /lab/status

重写规则:如果请求的文件或目录实际不存在,则重定向到index.php
===================================


`RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]
`

此时就大工告成了,具体效果可以直接查看: ELEC Server (kezez.com)

PS:
如果使用此方式,建议将被反向代理的网站引用的资源链接改成相对路径,否则可能不显示样式

参考

如何用PHP制作一个简单的反向代理 | Mayx的博客 (mabbs.github.io)

赞(0)
未经允许不得转载:工具盒子 » PHP实现简易反向代理