php是否能够实现将http请求转发到一个域名的指定IP下?

php是否能够实现将http请求转发到一个域名的指定IP下?
比如www.a.com这个域名有多台服务器,IP有4个,正常情况是随机的,如果我想在PHP层把访问的IP写死,有可能实现吗?

阅读 5.9k
6 个回答

可以的,CURLOPT_URL中的域名写成ip,然后在CURLOPT_HTTPHEADER中指定域名.

比如实际api地址为:http://www.a.com/api/user,需要解析到的ip为:192.168.0.11。就按下面这样写:

curl_setopt($ch, CURLOPT_URL, 'http://192.168.0.11/api/user');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: www.a.com'));  
新手上路,请多包涵

在服务器端对a.com这个域名绑个host就可啊。或者改一下nginx的配置,在内网直接可以使用ip地址访问也可以解决你这个问题。

可以使用nginx的反向代理功能。

不行。。php无法转发。。

Nginx

upstream www_a_com {
    # IP1 Server
    server 192.168.1.11:80 weight=1;
}

server{
    listen 80;
    server_name www.a.com;
    proxy_pass  http://www_a_com;
    # ....
}
<?php
/************************
* 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容
* 创建时间:2008-12-09
* 创建人:张宴(blog.s135.com)
* 参数说明:
*    $ip   服务器的IP地址
*    $host   服务器的host名称
*    $url   服务器的URL地址(不含域名)
* 返回值:
*    获取到的远程网页内容
*    false   访问远程网页失败
************************/
function HttpVisit($ip, $host, $url)   
{   
    $errstr = '';   
    $errno = '';
    $fp = fsockopen ($ip, 80, $errno, $errstr, 90);
    if (!$fp)   
    {   
         return false;   
    }   
    else  
    {   
        $out = "GET {$url} HTTP/1.1\r\n";
        $out .= "Host:{$host}\r\n";   
        $out .= "Connection: close\r\n\r\n";
        fputs ($fp, $out);   

        while($line = fread($fp, 4096)){
           $response .= $line;
        }
        fclose( $fp );

        //去掉Header头信息
        $pos = strpos($response, "\r\n\r\n");
        $response = substr($response, $pos + 4);
    
        return $response;   
    }   
}

//调用方法:
$server_info1 = HttpVisit("72.249.146.213", "blog.s135.com", "/abc.php");
$server_info2 = HttpVisit("72.249.146.214", "blog.s135.com", "/abc.php");
$server_info3 = HttpVisit("72.249.146.215", "blog.s135.com", "/abc.php");
?>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题