首页 > 代码库 > PHP实反向代理-收藏
PHP实反向代理-收藏
需求
现在有些后辍的域名不支持备案,这个时候需要用免备案主机或空间做个反向代理,这样可实现内容存放在国内主机统一管理
实现
用 php-dynamic-mirror 可实现,并在头部进行域名转换,可实现多个域名反向代理到不同的站点,一共两个文件简单方便,做个收藏
index.php
<?php$domain = $_SERVER[‘SERVER_NAME‘];$mirror = "www.mz.cn";switch ($domain){case "www.a.cn": $mirror = "www.az.cn"; break;case "www.b.com.cn": $mirror = "www.bz.com"; break;default: $mirror = "www.mz.cn";}$req = $_SERVER[‘REQUEST_METHOD‘] . ‘ ‘ . $_SERVER[‘REQUEST_URI‘] . " HTTP/1.0\r\n";$length = 0;foreach ($_SERVER as $k => $v) { if (substr($k, 0, 5) == "HTTP_") { $k = str_replace(‘_‘, ‘ ‘, substr($k, 5)); $k = str_replace(‘ ‘, ‘-‘, ucwords(strtolower($k))); if ($k == "Host") $v = $mirror; # Alter "Host" header to mirrored server if ($k == "Accept-Encoding") $v = "identity;q=1.0, *;q=0"; # Alter "Accept-Encoding" header to accept unencoded content only if ($k == "Keep-Alive") continue; # Drop "Keep-Alive" header if ($k == "Connection" && $v == "keep-alive") $v = "close"; # Alter value of "Connection" header from "keep-alive" to "close" $req .= $k . ": " . $v . "\r\n"; }}$body = @file_get_contents(‘php://input‘);$req .= "Content-Type: " . $_SERVER[‘CONTENT_TYPE‘] . "\r\n";$req .= "Content-Length: " . strlen($body) . "\r\n";$req .= "\r\n";$req .= $body;#print $req;$fp = fsockopen($mirror, 80, $errno, $errmsg, 30);if (!$fp) { print "HTTP/1.0 502 Failed to connect remote server\r\n"; print "Content-Type: text/html\r\n\r\n"; print "<html><body>Failed to connect to $mirror due to:<br>[$errno] $errstr</body></html>"; exit;}fwrite($fp, $req);$headers_processed = 0;$reponse = ‘‘;while (!feof($fp)) { $r = fread($fp, 8192); if (!$headers_processed) { $response .= $r; $nlnl = strpos($response, "\r\n\r\n"); $add = 4; if (!$nlnl) { $nlnl = strpos($response, "\n\n"); $add = 2; } if (!$nlnl) continue; $headers = substr($response, 0, $nlnl); $cookies = ‘Set-Cookie: ‘; if (preg_match_all(‘/^(.*?)(\r?\n|$)/ims‘, $headers, $matches)) for ($i = 0; $i < count($matches[0]); ++$i) { $ct = $matches[1][$i];# if (substr($ct, 0, 12) == "Set-Cookie: ") {# $cookies .= substr($ct, 12) . ‘,‘;# header($cookies);# } else header($ct, false);# print ‘>>‘ . $ct . "\r\n"; } print substr($response, $nlnl + $add); $headers_processed = 1; } else print $r;}fclose ($fp);?>
.htaccess
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]</IfModule>
文件
文件下载
PHP实反向代理-收藏
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。