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>

文件

  文件下载

 

目录
相关文章
|
10月前
|
关系型数据库 MySQL PHP
PHP 原生操作 Mysql
PHP 原生操作 Mysql
95 0
|
10月前
|
关系型数据库 MySQL 数据库连接
PHP 原生连接 Mysql
PHP 原生连接 Mysql
122 0
|
10月前
|
关系型数据库 MySQL Unix
PHP MySql 安装与连接
PHP MySql 安装与连接
176 0
|
18天前
|
NoSQL 关系型数据库 MySQL
linux服务器重启php,nginx,redis,mysql命令
linux服务器重启php,nginx,redis,mysql命令
26 1
|
2月前
|
关系型数据库 MySQL PHP
|
1月前
|
Ubuntu 关系型数据库 MySQL
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
23 0
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
|
27天前
|
前端开发 关系型数据库 MySQL
使用 PHP 和 MySQL 实现留言板功能
使用 PHP 和 MySQL 实现留言板功能
39 0
|
2月前
|
关系型数据库 MySQL PHP
【PHP 开发专栏】PHP 连接 MySQL 数据库的方法
【4月更文挑战第30天】本文介绍了 PHP 连接 MySQL 的两种主要方法:mysqli 和 PDO 扩展,包括连接、查询和处理结果的基本步骤。还讨论了连接参数设置、常见问题及解决方法,如连接失败、权限和字符集问题。此外,提到了高级技巧如使用连接池和缓存连接信息以优化性能。最后,通过实际案例分析了在用户登录系统和数据管理中的应用。
|
2月前
|
关系型数据库 MySQL PHP
unbuntu搭建LAMP(Apache2+PHP+MySQL+phpmyadmin)
unbuntu搭建LAMP(Apache2+PHP+MySQL+phpmyadmin)
|
2月前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册