Github项目地址:linuxserver/Heimdall: An Application dashboard and launcher (github.com)
Docker项目地址:linuxserver/heimdall - Docker Image | Docker Hub
自动识别内外网,以及自定义跳转方式
一、前提未安装Heimdall
本文不提供Heimdall的安装
但是得在安装过程中,添加一个目录挂载,不然安装后本地目录看不见这个目录
二、目录挂载
除了原本会映射出来的config文件夹,另一个先决条件得映射出Heimdall容器的另一个前端目录
2.1 挂载目录
2.1.1 群晖等NAS设备
修改容器的存储空间选项,选择添加的挂载文件夹
本地目录:随意
容器内目录:/var/www/localhost/heimdall/public
2.1.2 portainer
挂载的目录,挂载方式为bind
目录参考群晖的填写
2.1.3 docker代码行
部分人需要自定义网络或其他映射,剩余的请参考官方文档
docker run -v 本地目录 /var/www/localhost/heimdall/public -name Heimdall .....................................剩余参考官方文档
三、添加PHP文件
在映射的public本地目录中新建 zhuan.php,这文件命名你随意,只是在填写Heimdall跳转地址的时候需要修改为这个php
代码就不使用外链了,以防文件丢失
本人php并不专业,仅仅实现了这个小需求,代码苛刻的大牛要是批评我………….我也不会听
我学C的!我不管!
代码如下:(需自行修改前几行)
<?php
$local_host = '192.168.1'; //本地网段
$host_ip='192.168.1.211'; // heimdall本地ip
$openwrt_ip='192.168.1.118'; // openwrt本地ip
$frp_ip='**********'; // 内网穿透的ip,部分转换不支持域名(例如edge强制域名https,而部分服务不支持SSL)
$frp_domain='*****.***prlrr.com'; // 内网穿透的域名
// heimdall 内外网切换参数填写为: zhuan.php?lan=:内网端口&wan=:内网穿透外网端口&keyword=heimdall (SSL需要配置证书以及wan需要是https的端口)
// heimdall 不同的局域网openwrt填写为: zhuan.php?lan=:内网端口&wan=:内网穿透外网端口&keyword=openwrt
// heimdall 当前ip的不同端口服务参数填写为: zhuan.php?lan=:内网端口&wan=:内网穿透外网端口
//获取当前的域以及端口
$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']);
//截出仅仅域名或IP部分,不包括端口
$temp = strstr ($host, ':', true);
// echo "####host:".$host."####";
// echo "####temp:".$temp."####";
if(strpos($temp,$local_host) !== false){
// echo '当前属于局域网';
if (isset($_GET["lan"]))//判断所需要的参数是否存在,isset用来检测变量是否设置,返回true or false
{
if(isset($_GET["keyword"])){
//判断是否包含关键字heimdall,切换到外网的heimdall
if($_GET["keyword"]=="heimdall"){
$url="http://".$frp_domain.$_GET["wan"];
// echo "heimdall";
// echo "####url:".$url."####";
//判断是否包含关键字openwrt,切换到其他局域网的openwrt
}elseif($_GET["keyword"]=="openwrt"){
$url="http://".$openwrt_ip.$_GET["lan"];
// echo "openwrt";
// echo "####url:".$url."####";
}else{
header("http/1.1 404 not found");
exit();
}
}else{
//判断当前截取的$temp域名是否存在,不存在就使用浏览器自动获取的$host,加上事先设定的lan口的端口
$url = "http://".($temp?$temp:$host).$_GET["lan"];
// echo "####url:".$url."####";
}
}else{
header("http/1.1 404 not found");
exit();
}
header("Location: $url");
exit();
}else{
// echo '当前属于外网';
if (isset($_GET["wan"]))//判断所需要的参数是否存在,isset用来检测变量是否设置,返回true or false
{
if(isset($_GET["keyword"])){
//判断是否包含关键字heimdall,切换到内网的heimdall
if($_GET["keyword"]=="heimdall"){
$url="http://".$host_ip.$_GET["lan"];
// echo "heimdall";
// echo "####url:".$url."####";
//判断是否包含关键字openwrt,切换到外网的openwrt
}elseif($_GET["keyword"]=="openwrt"){
$url="http://".$frp_ip.$_GET["wan"];
// echo "openwrt";
// echo "####url:".$url."####";
}else{
header("http/1.1 404 not found");
exit();
}
}else{
//判断当前截取的$temp域名是否存在,不存在就使用浏览器自动获取的$host,当前属于外网,就加上事先设定的wan口的端口
$url = "http://".($temp?$temp:$host).$_GET["wan"];
// echo "####url:".$url."####";
}
}else{
header("http/1.1 404 not found");
exit();
}
header("Location: $url");
exit();
}
header("http/1.1 404 not found");
header("status: 404 not found");
//echo 'echo 404';//直接输出页面错误信息
header('location: /404.html');
exit();
?>
四、效果预览以及填写格式
如图:
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付