最近使用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:
如果使用此方式,建议将被反向代理的网站引用的资源链接改成相对路径,否则可能不显示样式
10 条评论
1
大佬网站用的内网穿透还那么快,佩服佩服
主要是穿透服务器的线路给力,哈哈
我真觉得PHP是最好的语言,缺点就是要多打字。
PHP在网站方面用的还是挺多的
牛啊!膜拜大佬
OωO
不错,要是有nginx的配置就好了
话说Nginx不是能直接反代嘛OωO
目前没有用到nginx