PHP实反向代理-收藏

简介: 需求   现在有些后辍的域名不支持备案,这个时候需要用免备案主机或空间做个反向代理,这样可实现内容存放在国内主机统一管理实现  用 php-dynamic-mirror 可实现,并在头部进行域名转换,可实现多个域名反向代理到不同的站点,一共两个文件简单方便,做个收藏  index.

需求 

  现在有些后辍的域名不支持备案,这个时候需要用免备案主机或空间做个反向代理,这样可实现内容存放在国内主机统一管理

实现

  用 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>

文件

  文件下载

 

目录
打赏
0
0
0
0
5
分享
相关文章
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
查看Linux、Apache、MySQL、PHP版本的技巧
以上就是查看Linux、Apache、MySQL、PHP版本信息的方法。希望这些信息能帮助你更好地理解和使用你的LAMP技术栈。
178 17
源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
通过以上步骤,你可以成功地在一台Linux服务器上从源码编译并安装LAMP环境,并配置一个BBS论坛(Discuz!)。这些步骤涵盖了从安装依赖、下载源代码、配置编译到安装完成的所有细节。每个命令的解释确保了过程的透明度,使即使是非专业人士也能够理解整个流程。
98 18
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
306 0
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
252 25
PHP与MySQL动态网站开发实战指南####
——深入探索LAMP栈下的高效数据交互与处理技巧 ####
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####
PHP与MySQL动态网站开发实战指南####
深入探索PHP与MySQL的协同工作机制,本文旨在通过一系列实战案例,揭示构建高效、稳定且用户友好的动态网站的秘诀。从环境搭建到数据交互,再到最佳实践分享,本文为开发者提供了一条清晰的学习路径,助力其在LAMP(Linux, Apache, MySQL, PHP/Perl/Python)栈上实现技术飞跃。 ####
php实现一个简单的MySQL分页
通过本文的详细步骤和代码示例,我们实现了一个简单的PHP MySQL分页功能。主要步骤包括计算总记录数、设置分页参数、查询当前页的数据以及生成分页链接。这种分页方式适用于大多数Web应用,能够有效提升用户体验和页面响应速度。
224 4
PHP与MySQL的无缝集成:构建动态网站的艺术####
本文将深入探讨PHP与MySQL如何携手合作,为开发者提供一套强大的工具集,以构建高效、动态且用户友好的网站。不同于传统的摘要概述,本文将以一个生动的案例引入,逐步揭示两者结合的魅力所在,最终展示如何通过简单几步实现数据驱动的Web应用开发。 ####
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问