纪涛博客个人日记版ysji.com.cn 纪涛博客SEO优化版0713seo.com 纪涛博客淘客网销版taobao126.com 纪涛微博碎语版 纪涛微博闲言版

特点

反向代理和iframe框架嵌套是不同的 实现后的结果也是不同的。iframe框架嵌套可以在其他域名显示源站的页面内容,但是iframe是不被搜索引擎抓取的。还有就是 iframe不能子页面继承。

反向代理是可以实现一个站在不同域名下 处于不同服务器中 内容显示完全一致的这个需求的。而且镜像域名首页、内页同样会被搜索引擎收录。(当然 内容完全一样的站点也容易被搜索引擎不重视 虽然收录,但是会被认为是复制内容 及时收录了 也得不到多少展示,没有了价值)

在这里,我需要反向代理为我们干点什么呢,比如 我有个博客 我博客没有备案,或者我不想备案,但是我有篇文章想分享到微信朋友圈,怎么办(微信朋友圈不支持201?年后的新注册未备案域名分享),就可以买一个二手已备案域名 做反向代理。作为备用域名。或者申请免费二级域名(通常这类提供服务的已经有了备案)(能支持a记录和cname 的)。


原理

反向代理 我的理解就是 将源站点在我镜像服务器上加载 然后分发到访问我镜像站点的用户浏览器中。


需求 

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

实现

  用 php-dynamic-mirror 可实现,并在头部进行域名转换,可实现多个域名反向代理到不同的站点,一共两个文件简单方便,做个收藏


文件下载:博客园

反向代理截图:

本地的环境是 phpnow  php版本5.0    主流版本至少5.3 php环境对zblog php支持存在问题。所以截图上显示的有出错提示


使用wdcp的服务器反向代理成功效果图--- 内页(因zblog后台有默认域名 所以访问首页后点击任何一个链接都到源站上去了。在这里手工输入网址  代理域名/ID.html 即可实现访问。续wdcp现有的环境支撑 (伪静态功能))


下面是文件代码:   一个站使用的时候  只需要替换 www.mz.cn网址为目标站点地址即可。

  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>



评论区

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

您好,欢迎到访网站!
  查看权限

«   2018年1月   »
1234567
891011121314
15161718192021
22232425262728
293031

标签列表

    最新留言