
内网穿透(cpolar)的映射 :当你通过 cpolar 域名外网访问时,请求到达你本机的 Apache 时,如果 Apache 的虚拟主机配置(如 ServerName / ServerAlias)默认匹配了本地环境,或者反向代理透传了本地 Host,它依然可能表现为本地地址。
$_SERVER'REMOTE_ADDR'也永远指向127.0.0.1
php
<?php
include_once './php/drive/mailkit.php';
//切换回部署环境
ini_set('display_errors','On');
error_reporting(E_ALL); // ★ 必须开到 ALL,否则被屏蔽的错误变不成异常
ob_start(); // 开启输出缓冲
session_start();
header('Accept:application/json;Content-Type:application/json;charset=utf-8');
try
{
include_once './php/drive/dynamicDomianSelect.php';
include_once './php/drive/cpolar_tunels.php';
include_once './php/drive/PrivateIpv4.php';
include_once './php/datamodel/globalVariable.php';
//include_once './php/drive/utility.php';
if($_SERVER['HTTP_HOST']=='localhost' || $_SERVER['HTTP_HOST']=='127.0.0.1')
{
$ip = gethostbyname($_SERVER['HTTP_HOST']);
}
else
{
$ip = $_SERVER['HTTP_HOST'];
}
if(isPrivateIp($ip)==true)
{
$newdomian='http://'.$_SERVER['HTTP_HOST'];
}
else
{
//不定时检查更新cpolar域名
if(mt_getrandmax()%3<=2)
{ //控制概率不定时更新cpolar动态域名
//$cpolarInfo = DynamicCpolar::getCpolarInfo(); //这里会拖慢所读,还可能报错500
$newurl = DynamicCpolar::getCpolarURL();
$domains[1] = $newurl;
}
else
{
$cpolarInfo = DynamicCpolar::getCpolarInfoWithCache($cacheCpolarInfoV3);//优化,减少数据请求
foreach ($cpolarInfo['items'] as $item)
{
if($item['name']=='Apache'){
$domains[1]=$item['pubulic_url'];
$_SESSION['global_domains'] = $domains;
}
}
}
$_SESSION['global_domains'] = $domains;
//$selectDomain->updateCpolarDomain($domains[1],$hsk->FlowUsage());//全局变量
$selectDomainV4->updateCpolarDomain($domains[1]);//全局变量
$selectDomainV4->varchangeFactor($hsk->distillHskFlow(),DynamicCpolar::getCpolarCreatedatetime());//全局变量$hsk
//$newdomian=DynamicSelect($domains); //选域名
//$newdomian = $selectDomain->DynamicSelect(); //选域名
$newdomian = $selectDomainV4->DynamicSelectV4(); //选域名
//setcookie("global_domains", json_encode($domains), 0, "/");
setcookie("global_domains", urldecode(json_encode($domains,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES)), 0, "/");
//setcookie("global_domains", pretty_decode_mess(json_encode($domains,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES)), 0, "/");
// 设置对应的 CORS 头
{
header("Access-Control-Allow-Origin: $newdomian"); // 动态设置允许的域名,只允许设置一个域名
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
header("Access-Control-Allow-Credentials: true"); // 如果需要传递 cookie,必须为 true
}
}
//路由分发
if(isset($_GET['redirectTo']) ) {
$newlocation='location:'.$newdomian.$_GET['redirectTo'];
}
else
{
$newlocation='location:'.$newdomian.'/html/Welcome.html.php';
}
// 确保在设置 Cookie 后立即重定向,且没有其他输出
//header('location: ./html/Welcome.html');
header($newlocation);
ob_end_flush(); // 发送缓冲区内容并关闭缓冲
exit; // 确保脚本终止,避免后续输出破坏头部
}
catch(Throwable $err)
{
error_log(sprintf(
"[CPOLAR FATAL] %s (%d) in %s\n%s",
$err->getMessage(),
$err->getCode(),
$err->getFile(),
$err->getTraceAsString()
));
//发送邮件,报错
$send=new sendmail();
$send->To='Rise8888@outlook.com';
$send->Subject="[PHP] index.php 发生异常";
$send->Body=$err->getMessage().$err->getCode().$err->getFile().$err->getTraceAsString();
$send->proxySend();
//跳到欢迎页面
header('location: ./html/Welcome.html.php');
}
?>