我有以下格式的url(我把它写成aregex):
http://exampledomain.com/files/.+
URL是由客户端通过我的代理服务器请求的。
我在这个请求中注入了一个自定义的授权头。这没问题,我可以用apache中的mod_proxy和mod_headers来做到这一点。
然而,这个url提供了一个302重定向到另一个源,该源最终应该到达客户端。
另一个url是SSL安全的,看起来像:
https://example.+.exampledomain.com/files/.+/.+
它需要与另一个相同的授权头。但是因为它的hTTPS,我不能简单地使用mod头来注入它。
因此,我的计划是建立一个反向代理,用于请求带有授权标头的第一个HTTPURL。后面是一个脚本,它获取请求,解析出第二个HTTPS URL,下载带有自定义授权标头的源,并将接收到的文件(字节和http标头)传递给客户端。
我熟悉Apache2和PHP,所以坚持使用它们会很好。但这并不是必须的。
为了澄清,我们在这里谈论的是快速共享链接。我的公司在那里有备份文件和存储,因为它是最便宜的云主机。有些作业服务器需要获取文件,但我无法在它们上配置用户/密码。因此,代理服务器应该添加高级身份验证信息。
我想了一些类似的东西:
proxy.php-此文件是使用反向代理请求的,并由Web服务器提供服务这个代理php是由htaccess重写规则和上的revery代理写入的http://one-or-my-domoains/request-uri-from-the-original-request(在apache中生成)
$url = "http://example.com/".$_SERVER["REQUEST_URI"];
$opts = array(
'http'=>array(
'header'=>"Cookie: myauthvalue=examplern"
)
);
$context = stream_context_create($opts);
stream_context_set_default($context);
$http_content = get_headers($url, 1);
$ssl_location = $http_content['Location'];
$fp = fsockopen("ssl://".parse_url($ssl_location, PHP_URL_HOST), 443, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />n";
} else {
$out = "GET ".parse_url($PHP_URL_PATH, PHP_URL_HOST)." HTTP/1.1rn";
$out .= "Host: ".parse_url($ssl_location, PHP_URL_HOST)."rn";
$out .= "Cookie: myauthorization=something";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
因此,这基本上应该将ssl下载传递给用户启动的标准http连接,而不是重定向。
我现在的问题是:这行得通吗?我错过什么了吗?有什么需要注意的地方吗?
我认为这将是一个合理的麻烦,包括反向代理设置等等。
好吧,我最终只是做了passthrough('wet….'),效果很好;)