![](/img/trans.png)
[英]How do I use Apache::Reload under ActiveState Perl on Windows?
[英]How do i use Apache for Upload and Nginx for Secure Download
我有一個網站,用於在perl中進行文件共享,現在有用於下載請求的文件index.dl。 在apache中,它會產生非常高的負載,負載幾乎達到100。
現在我不能使用Nginx代理。
我想設置apache來處理所有上載,並設置nginx來處理下載請求。
我已經檢查了有一個模塊“ http-secure-link-module”,所以我也已經安裝了它。
現在我們的網站生成文件下載鏈接,例如
xyz.com/d/$hash/filename.xyz
現在這是生成鏈接的代碼
sub genDirectLink
{
my ($file,$mode,$mins,$fname)=@_;
require HCE_MD5;
my $hce = HCE_MD5->new($c->{dl_key},"mysecret");
my $usr_id = $ses->getUser ? $ses->getUserId : 0;
my $dx = sprintf("%d",($file->{file_real_id}||$file->{file_id})/$c->{files_per_folder});
my $hash = &encode32( $hce->hce_block_encrypt(pack("SLLSA12ASC4L",
$file->{srv_id},
$file->{file_id},
$usr_id,
$dx,
$file->{file_real},
$mode||'f',
$c->{down_speed},
split(/\./,$ses->getIP),
time+60*$mins)) );
#$file->{file_name}=~s/%/%25/g;
#$file->{srv_htdocs_url}=~s/\/files//;
my ($url) = $file->{srv_htdocs_url}=~/(http:\/\/.+?)\//i;
$fname||=$file->{file_name};
return "$url:182/d/$hash/$fname";
}
sub encode32
{
$_=shift;
my($l,$e);
$_=unpack('B*',$_);
s/(.....)/000$1/g;
$l=length;
if($l & 7)
{
$e=substr($_,$l & ~7);
$_=substr($_,0,$l & ~7);
$_.="000$e" . '0' x (5-length $e);
}
$_=pack('B*', $_);
tr|\0-\37|A-Z2-7|;
lc($_);
}
我已經將我的nginx配置設置為
server {
listen 182;
server_name myhost.com www.myhost.com;
location / {
root /home/user/domains/hostname.com/public_html/files;
}
location /d/ {
secure_link_secret mysecret;
if ($secure_link = "") {
return 403;
}
rewrite ^ /files/$secure_link;
}
location /files/ {
internal;
}
}
所以現在的問題是,當我嘗試訪問任何鏈接時,它會顯示404錯誤。 我如何才能下載文件?
從nginx 0.8.50開始不推薦使用此指令secure_link_secret
,請參閱: http ://wiki.nginx.org/HttpSecureLinkModule
我使用正確的指令編寫了代碼:
server {
listen 182;
server_name example.com;
location / {
root /home/fileshare/domains/fileshare4u.com/public_html/files;
}
location ~^/d/(?P<hash>[^\/]+)/(?P<url>.*)$ {
secure_link $hash,$arg_e;
secure_link_md5 KEY$url$arg_e;
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 403;
}
rewrite ^ /files/$url last;
}
location /files/ {
alias /tmp/;
internal;
}
}
perl哈希生成:
use Digest::MD5 qw(md5 md5_hex md5_base64);
# http://search.cpan.org/~kazuho/MIME-Base64-URLSafe-0.01/lib/MIME/Base64/URLSafe.pm
use MIME::Base64::URLSafe;
$uri = "sitemap_artistas_1.xml.gz"; # FILE NAME
$key = "KEY"; # KEY
$expire = time() + 30; # 30s
$hash = urlsafe_b64encode(md5("$key$uri$expire"));
$domain = "example.com";
$port = "182";
return "http://$domain:$port/d/$hash/$uri?e=$expire";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.