onMessage = function(TcpConnection $connection, Request $data) { $token = $data->cookie('token', 'null'); if($token=='null'){ $host = $data->host(); $public=true; $connection->send(HTMLview('./view/login.php', array('public'=>$public))); $connection->close(); } // Parse http header. list($method, $addr, $http_version) = explode(' ', $data); $_headers=explode("\r\n",$data); $headers=[]; foreach ($_headers as $_header){ $_point=strpos($_header,':'); if ($_point===false) continue; $headers[substr($_header,0,$_point)]=trim(trim(substr($_header,$_point),':')); } //源站IP地址 $source_ip='106.54.203.91'; $source_host='laysense.cn'; $ssl=false; if($ssl==true){ $port=443; $source_ip=$source_host; }else{ $port=80; } print_r('用户IP:'.$connection->getRemoteAddress().'| 访问域名:'.$headers['Host'] .' | 源站:'.gethostbyname($source_ip).'| 回源域名'.$source_host.'|SSL:'.$ssl); // Async TCP connection. $remote_connection = new AsyncTcpConnection('tcp://'.$source_ip.':'.$port); // CONNECT. if($ssl==true){ $remote_connection->transport = 'ssl'; } if ($method !== 'CONNECT') { //替换request 中的回源host $remote_connection->send(replaceHost($data,$source_host)); // POST GET PUT DELETE etc. } else { $connection->send("HTTP/1.1 200 Connection Established\r\n\r\n"); } $remote_connection->onMessage=function (TcpConnection $SourceConn, $SourceData)use ($connection){ $connection->send($SourceData); }; $remote_connection->onClose = function ($source) use ($connection) { $connection->close(); }; $remote_connection->onBufferFull = function ($SourceConn) use ($connection) { $connection->pauseRecv(); }; $remote_connection->onBufferDrain = function ($SourceConn) use ($connection) { $connection->resumeRecv(); }; $connection->onMessage=function (TcpConnection $ClientConn, $ClientData)use ($remote_connection,$source_host){ $remote_connection->send(replaceHost($ClientData,$source_host)); }; $connection->onClose = function (TcpConnection $ClientConn) use ($remote_connection) { $remote_connection->close(); }; $connection->onBufferFull = function (TcpConnection $ClientConn) use ($remote_connection) { $remote_connection->pauseRecv(); }; $connection->onBufferDrain = function (TcpConnection $ClientConn) use ($remote_connection) { $remote_connection->resumeRecv(); }; $remote_connection->connect(); }; // 运行worker Worker::runAll();