需求

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

实现

  用 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实反向代理-收藏的更多相关文章

  1. Nginx代理与反向代理、负载均衡实

    通过 Nginx 提供的反向代理和负载均衡功能,可以合理的完成业务的分配,提高网站的处理能力:同时利用缓存功能,还可以将不需要实时更新的动态页面输出结果,转化为静态网页形成缓存,从而提高网站的响应速度 ...

  2. Linux下nginx反向代理服务器安装与配置实操

    1.我们只要实现访问nginx服务器能跳转到不同的服务器即可,我本地测试是这样的, 在nginx服务器里面搭建了2个tomcat,2个tomcat端口分别是8080和8081,当我输入我nginx服务 ...

  3. Nginx反向代理的目录访问问题

    Nginx反向代理的目录访问问题 2013-05-13 23:21 2730人阅读 评论(0) 收藏 举报 从昨天就开始纠结了,在做实验的时候,遇到目录访问的问题,如下 前端nginx vhost的设 ...

  4. 利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理

    Nginx的好处相信我不必多说了,它作为一个相当轻量级的开源Web 服务器以及反向代理服务器而深受欢迎.越来越多的公司已经对它产生兴趣,包括我们公司的许多部门,利用它进行负载均衡和资源管理,之前写过一 ...

  5. Apache 如何反向代理tomcat并且实现Session保持

    简介 LAMT=Linux+Apache+MySQL+Tomcat: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器: 在中小型系统和并发访问用户不是很多的场合下 ...

  6. upstream模块实现反向代理的功能

    nginx平台初探(100%) — Nginx开发从入门到精通 http://tengine.taobao.org/book/chapter_02.html#id6 nginx的模块化体系结构¶ ng ...

  7. 详细解析用Squid实现反向代理的方法

    代理服务器是使 用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,使内部网主机免受 外部网主机的攻击.但是,如果想让互联网 ...

  8. 生产环境中nginx既做web服务又做反向代理

    一.写对于初入博客园的感想 众所周知,nginx是一个高性能的HTTP和反向代理服务器,在以前工作中要么实现http要么做反向代理或者负载均衡.尚未在同一台nginx或者集群上同时既实现HTTP又实现 ...

  9. nginx的反向代理和配置

    最近有打算研读nginx源代码,看到网上介绍nginx可以作为一个反向代理服务器完成负载均衡.所以搜罗了一些关于反向代理服务器的内容,整理综合. 一  概述 反向代理(Reverse Proxy)方式 ...

随机推荐

  1. Android自动化测试之环境搭建

    Android自动化测试之环境搭建 一.Android-sdk介绍 SDK(Software development kit)软件开发工具包.被软件开发工程师用于为特定的软件包.软件框架.硬件平台. ...

  2. getByClassName2016/4/21

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  3. javascript语句语义大全(5)

    1. var str = "abcd";alert(str.length);alert(str.charAt(0));//获取下标为0的字符alert(str.charCodeAt ...

  4. 批量文件重命名工具-极力推荐 advanced renamer

    http://www.advancedrenamer.com/  功能太强大了,自己慢慢探索吧.

  5. 动态规划1-----------poj1080

    #include<cstdio> #include<cstdlib> #include<iostream> #include<algorithm> us ...

  6. 第19章 网络通信----UDP程序设计基础

    用户数据报协议(UDP)是网络信息传输的另一种形式. 基于UDP通信的基本模式如下: (1)将数据打包(称为数据包),然后将数据包发往目的地. 发送数据包: 使用DatagramSocket()创建一 ...

  7. kick_ball

    package com.hereyouare.KickBall; import android.app.Activity; import android.app.AlertDialog; import ...

  8. [转]PHP经验——PHPDoc PHP注释的标准文档

    文档翻译自:http://en.wikipedia.org/wiki/Phpdoc 标记 用途 描述 @abstract   抽象类的变量和方法 @access public, private or ...

  9. centos minimal Bind 主从服务器部署

    实验环境 两台虚拟机BindM和BindS,装的系统都是centos6.3 minimal   IP地址 主机名hostname 主DNS服务器 192.168.137.102 bindm.cas.c ...

  10. nginx php版本隐藏

    配置完一台服务器后,并不是就可以高枕无忧了,前不久刚刚爆发的PHP 5.3.9版本的漏洞也搞得人心惶惶,所以说经常关注安全公告并及时升级服务器也是必要的.一般来说,黑客攻击服务器的首要步骤就是收集信息 ...