我有兩臺服務器,在我的網站正在運行的第一個用戶與之交互。如何使用php重定向從另一臺服務器下載
第二個創建應該由用戶下載的某些文件,但用戶不應該知道第二臺服務器。
另一個小問題:我的第二個服務器使用的htaccess
客戶< ---> Web服務器< --->文件服務器
我怎麼能執行一個下載在的第一臺服務器,其中,文件實際上來自第二個,沒有使第二個服務器的URL公開?
我有兩臺服務器,在我的網站正在運行的第一個用戶與之交互。如何使用php重定向從另一臺服務器下載
第二個創建應該由用戶下載的某些文件,但用戶不應該知道第二臺服務器。
另一個小問題:我的第二個服務器使用的htaccess
客戶< ---> Web服務器< --->文件服務器
我怎麼能執行一個下載在的第一臺服務器,其中,文件實際上來自第二個,沒有使第二個服務器的URL公開?
您的客戶端上傳文件的這樣。
<form action="#" method="post" enctype="multipart/form-data">
<input name="file" type="file" />
<button type="submit" name="send">Send</button>
</form>
然後你可以使用它。
<?php
// Deny access from all except your first (file) server
$publicDir = '/srv/www/private/';
$fileName = basename($_FILES['file']['name']);
$filePath = $publicDir . $fileName;
if (move_uploaded_file($_FILES['file']['tmp_name'], $filePath))
{
shell_exec("ssh [email protected] 'cd /srv/www/mypath && wget \"http://srv/private/" . $fileName . "\"' 2>&1");
}
使用mogilefs,安裝文件服務器和Web服務器上使用。 因此,您可以將文件添加到包含文件服務器的「mogilefs」中。 稍後,您可以添加更多服務器而不會出現問題。
在Linux上,你可以安裝到你的文件服務器的路徑(例如到/ mnt /文件服務器)。 然後,您可以給www-data寫入目錄的權限。 然後你可以將move_uploaded_file加載到安裝的目錄中。
在這種情況下,您可以輕鬆處理這些文件。
搞到現在
$file = "myURL"
$htaccessLogin = "user:password"
set_time_limit(0);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $file);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_USERPWD, $htaccessLogin);
$r = curl_exec($ch);
curl_close($ch);
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
header('Cache-Control: private', false);
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="'myfile.zip"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . strlen($r));
header('Connection: close');
echo $r;
是否使用Apache的工作?
嘗試mod_proxy的Apache documentation
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
/foo是Server1上的路徑(其中這個配置放置)和代表其請求到Server2
有了這個,你可以設置這樣的事情
http://server1.tld/download/file => server2。TLD /文件
,而用戶看到服務器2
我用這主要是爲了提供一個端口代理的URL。我有一個服務在80以外的端口上運行,我想在http標準端口上提供它。
最佳,安德烈
添加的HTTP基本驗證可能性
發現here
你也有下面幾行加入Apache的配置,在代理規則最好的未來。
<Location /foo>
RequestHeader set Authorization "Basic dXNlcm5hbWU6cGFzc3dvcmQK"
</Location>
背後基本的散列將與此命令生成:
> $ echo "username:password" | base64
dXNlcm5hbWU6cGFzc3dvcmQK
聽起來不錯,但它也可以用htaccess嗎? – 2014-09-10 11:14:27
是的,這是可能的。如果找到解決方案[這裏](http://superuser.com/questions/704781/apache-mod-proxy-with-automatic-authentication) 你只需要創建一個
謝謝,但我需要下載一個文件,而不是把它上傳。文件在文件服務器上創建。我糾正了標題 – 2014-09-10 09:20:17
然後使用nginx規則重定向(內部)與proxy_pass或直接使用'shell_exec('wget''。$ neededFile。'「');'並使用該文件。之後'取消鏈接($ neededFile);'或者你使用二/三的想法。應該完美地工作:) – PatrickB 2014-09-10 09:36:28