á á±á¬ááá¯áá»ážáá¬á
áá áºáá±áá¬áá¬ááŸá¬ 1.5 TB áááºááá¯áá²á· data ááœá±ááᯠááááºážáááºážáá¬ážááá¯á· ááá¯á¡ááºááŒá®áž áá¬áááºá¡áá¯á¶ážááŒá¯áá°ááœá±ááᯠááá¯ááºááá¯ááºááá·áºááºááá±áá áºááá·áº áá±á«ááºážáá¯ááºáá¯ááºááá¯ááºáá²á· á áœááºážáááºááá¯áááºáž áá±ážá áœááºážááá¯ááºáá«áááºá á¡á ááºá¡áá¬á¡á¬ážááŒáá·áºááá¯áá²á·ááá¯á·áá±á¬ááŸááºáá¬ááºááá¬áááẠVDS ááá¯á·ááœá¬ážáá±á¬ááŒá±á¬áá·áºá "áá¬ááŸááá¯ááºá" á¡áá»áá¯ážá¡á á¬ážááŸá á®áá¶ááááºážáááºáá»ááºááœááºááá«áááºááá·áºááŸá¬ážáááºážááá¯ááºáá»á ááááºááŸáá·áºá¡áááºážá¡ááŒá áºáá±áá¬ááŸáá»áœááºá¯ááºááœáẠVPS 400GB SSD ááŸááááºá áá»áœááºá¯ááºáááºáá»áŸááºáááºá ááá¯áá»ááºáá¬á 1.5TB áá¯á¶ááœá±ááᯠáá¯á¶ážááŸá¯á¶ážááŸá¯áááŸá ááááááºáá¬ážááá¯á· áááá°ážá
ááŒá®ážáá±á¬á· Windows XP ááŸá¬áᬠá¡áá¯ááºáá¯ááºááá·áº áááá¯ááááºááœá±ááá¯áá»áá¯áž Google Drive áá²á á¡ááŸáá¯ááºááœá±ááᯠáá»ááºááá¯ááºáááºá á¡ááºáá¬áááºá á¡áááºážááŒááºáá²á·áá±ááºááááºážá á ááºáá á¹á ááºážáá áºáá¯ááá± áá±á¬ááºáá áºáá¯áá®ááᯠááœá±á·áá»á¬ážáá¬áá²á· áááŒá¬ážá¡áá¬ááœá±ááᯠá¡ááá·áºá¡áááºáááŸá áá»ááºáá áºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá ááᯠvirtual box á áá¬ážááŸááºáž 10-20 ááẠnostalgic ááŸááœá²á á¡ááŒá¬ážáááºááá¯ážáá áºáá¯áá»áŸáááŸááá«) ááá¯á·áá±á¬áẠá¡áá¬á¡á¬ážáá¯á¶ážááẠá¡ááœááºá¡áááºááŒá±ááá·áºáááºá á¡ááŒá²áááºážáá»ááºáá»ááºážáá¯ááºáááºááá¯á·ááŒá±á¬áááºá ááá¯á·ááŒá±á¬áá·áºá api ááá¯á· áá±á¬ááºážááá¯áá»ááºá¡áá±á¡ááœááºááá·áºáááºáá»ááºááᯠááŒááºáá»á±á¬áºááœá¬ážááŒááºáž (áááºážáááºážá¡á¬ážááŒáá·áº ááŒá¿áá¬áá áºá á¯á¶áá áºáá¬áááŸááá² áááºážááá¬áá¶á·ááá¯ážááŸá¯á¡áá°á¡áá®ááẠáá¯á¶ážá áœá²áá°áá áºáŠážáá»áŸáẠáá±á¬ááºážááá¯ááŸá¯ááœá²áááºážááᯠá áá¹ááá·áº 100 á¡ááœááºáž 10 ááá¯á· 000 ááá¯á· ááá¯ážá á±áááº)á áá±áá¬ááẠáááºážááá±á¬ááºáááºááŒáá·áºáá»ááºááŸá¯áá±áá¬ááá¯á· áá»ááºááŒááºá áœá¬ á á®ážáááºážááœá¬ážáá«áááºá .
á¡áá¬á¡á¬ážáá¯á¶ážá áá±á¬ááºážááœááºáá±áá¯á¶ááá±á¬áºáááºáž ááá¯á¡áá« áááºážááᯠáá±á¬ááºáá¯á¶ážá¡áá¯á¶ážááŒá¯áá°áᶠáááºááŒááá¯áá«áááºá ááá¯á·á¡ááŒááºá á¡ááŒá¬ážá¡áááºážá¡ááŒá áºáá»á¬ážááá¯á·ááŒááºááœáŸááºážááŒááºážáááŒá¯áá²á ááá¯á·áá±á¬áºáá°áá áºáŠážááẠ"áá±á«ááºážáá¯ááº" ááá¯ááºááá¯ááá¯ážááŸááºážá áœá¬ááŸáááºá áááá¬ááá¯ááºááá»á±á¬áºááœáŸááºáá±á¬ááá¯ááºááŸááºááŒá áºáá¬á á±áááºá
á€ááœáẠáá¯áá¬ážááááºááŒá±á¬áá·áº áá»áœááºá¯ááºááẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ áá¯áá¹ááá»á¬ážááᯠááœá±á·ááŒá¯á¶áá²á·ááá«áááºá á¡á ááá¯ááºážááœáẠáááºážááẠAmPHP ááœáẠáá¬ááºááœáŸááºážáá áºáá¯ááŒá áºáá±á¬áºáááºáž áááºážáááºáá®ážáá¬ážáá±á¬áááºááᯠáá»áœááºá¯ááºááá»á±áááºáá« (á¡á ááœáẠ100% core áá¯á¶ážá áœá²ááŸá¯á¡áá áááááá¬áá¬áá¯ááºááœá¬ážáááº)á ááá¯á·áá±á¬áẠReactPHP á¡ááœáẠcurl wrapper ááẠáá»áœááºá¯ááºáááá¹áááŸáá·áº ááá¯ááºáá®áá±á¬ CPU áááºáááºááŸá¯ á¡áá±á¡ááœááºá¡á á¡áá±á¬áºáá±áž á¡á¶áááºááœááºáá»ááŒá áºáá²á·áá±á¬áºáááºáž áá»áœááºá¯ááºá¡ááá¯ááŸáááá·áº ááŒááºááŸá¯ááºážááᯠáá¯á¶ážáááá±ážáá²á·áá« (áá¯ááºážáá±á«áºááá¯ááŸá¯ááŒá¬ážáá¬áááᯠááá¯ážááŸááºážá áœá¬ áá»áŸá±á¬á·áá»ááá¯ááºááẠcurl_multi_selectá ááá¯á·áá±á¬áºá ááá¯á·áá±á¬ááºáá»áœááºá¯ááºááá¯á·ááœááºáááááœá±ážáá»ááºááŸá¯ááŸáá·áºáááºáá°áá±á¬á¡ááá¯ááºá á¬ážáá áºáá¯ááŸááááºá Rust ááœáẠáá±ážáááºáá±á¬ áááºáá±á¬ááºááŸá¯áá áºáá¯ááᯠáá±ážáááºááẠááŒáá¯ážá á¬ážáá²á·áá±á¬áºáááºáž áááºážááẠá¡ááœááºáá»ááºááŒááºá áœá¬ á¡áá¯ááºááŒá áºáá²á·ááẠ(áááºážááẠá¡áá¯ááºááŒá áºáááºá áá»áœááºá¯ááºá á¡ááááá¬áá±ážáá¬ážááá·áºá¡ááœáẠá¡á¶á·ááŒá áá¬ááŒá áºáááº)á ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯ááá¯áá»ááºááŒá®áž áááºážááᯠá áááºááŒáá¯ááºááŒááºáááºááẠá¡áááºážáááºáááºáá²áá«áááºá ááá¯á·á¡ááŒááºá á€ááŒá±ááŸááºážáá»ááºá¡á¬ážáá¯á¶ážááẠáá¯á¶á·ááŒááºááŸá¯ááᯠáá áºáááºážáááºážááŒáá·áº áá°ážáá°ážááŒá¬ážááŒá¬áž áá¶ááá¯ááºáááºááŸáááŒá®áž ááá¯ááºáá±á«ááºážáá¯ááºááẠá¡ááŒá®ážáá»ááºáá¯á¶ážáááá»ááŸá¯ááŒáá·áº á¡áá¯á¶ážáááºááá·áºá¡áá»áááºááᯠááŒá±áá¬áá¶áá»ááºáá«áááºá
áá±áá°áá»á¡á¬ážááŒáá·áºáá±á¬á· á¡áá»áááºá¡áá±á¬áºááŒá¬á¡á±á¬áẠááááºáá²á·áá±ááá·áº á¡áá¯ááºááŒá áºáá²á·áá«áááºá ááá±á·ááá±á·áá¡áá áá°á·áá²á· áá°ážááœááºááŸá¯ááŸá¬ áá°ážáá°ážááŒá¬ážááŒá¬áž á¡ááœá±ážáá áºáᯠáá±á«áºáá¬áá²á·áááº- nginx áᬠáá®á¡áá¯áá®á¡á áá»áœááºáá±á¬áºááá¯áá»ááºáá¬ááᯠáá¯ááºááá¯ááºáááºá ááŒááºááŒááºáááºáááºáá²á· áá±á¬ááºááŒááºáá²á·áá¯á¶á á¶á¡á¬ážáá¯á¶ážááᯠááœáá·áºááŒá¯áá±ážááá¯ááºáá«áááºá áá«ááá¯á·ááŒáá¯ážá á¬ážáááẠ- á¡á²áá«á á¡áá¯ááºááŒá áºááẠáááºááá¯áá¯ááºááá²á áá±á·áá áºáááºááᯠáááºááá¯ááºááŸá¬ááœá±ááŒá®ážáá±á¬ááºá ááá±á«ááºážáá»á¬ážá áœá¬ áááºááŒáááºá áœá¬ á¡áá¯ááºáá¯ááºááŒá®áž áá»áœááºá¯ááºáááá¯á¡ááºáá»ááºá¡á¬ážáá¯á¶ážááᯠááŒáá·áºáá®áá±á¬ á¡ááŒá±áá áºáᯠááœá±ážááœá¬ážáá¬áá²á·áááºá
NGINX ááᯠá áá áºááá·áºááœááºážááŒááºážá
# ÐеÑвÑÐŒ ЎелПЌ ÑПзЎаЎОЌ в кПМÑОгаÑ
МаÑегП ÑайÑа ПÑЎелÑÐœÑÑ Ð»ÐŸÐºÐ°ÑОÑ.
location ~* ^/google_drive/(.+)$ {
# РзакÑПеЌ ÐµÑ ÐŸÑ Ð¿ÐŸÑÑПÑПММОÑ
глаз (ÑÑк, МПг О пÑПÑОÑ
ÑаÑÑей Ñела).
internal;
# ÐгÑаМОÑОЌ пПлÑзПваÑелÑÐŒ ÑкПÑПÑÑÑ ÐŽÐŸ ÑазÑЌМÑÑ
пÑеЎелПв (Ñ Ð·Ð° ÑавМПпÑавОе).
limit_rate 1m;
# Ð ÑÑПб nginx ЌПг МайÑО ÑеÑвеÑа google drive ÑкажеЌ ÐµÐŒÑ Ð°ÐŽÑÐµÑ ÑезПлвеÑа.
resolver 8.8.8.8;
# CПбеÑеЌ пÑÑÑ Ðº МаÑÐµÐŒÑ ÑÐ°Ð¹Ð»Ñ (ÐŒÑ Ð¿ÐŸÑПЌ пеÑеЎаЎОЌ егП загПлПвкаЌО).
set $download_url https://www.googleapis.com/drive/v3/files/$upstream_http_file_id?alt=media;
# Ð Ñак же Content-Disposition загПлПвПк, ÐžÐŒÑ Ñайла ÐŒÑ Ð¿ÐµÑеЎаЎОЌ ПпÑÑÑ Ð¶Ðµ в загПлПвкаÑ
.
set $content_disposition 'attachment; filename="$upstream_http_filename"';
# ÐапÑеÑОЌ бÑÑÑеÑОзОÑПваÑÑ ÐŸÑÐ²ÐµÑ ÐœÐ° ЎОÑк.
proxy_max_temp_file_size 0;
# Ð, ÑÑП МеЌалПважМП, пеÑеЎаЎОЌ загПлПвПк Ñ ÑПкеМПЌ (Ме Ð·ÐœÐ°Ñ Ð¿ÐŸÑеЌÑ, МП в загПлПвкаÑ
Оз $http_upstream ÑПкеМ пеÑеЎаÑÑ ÐœÐµ пПлÑÑОлПÑÑ. ÐеÑМее пеÑеЎаÑÑ Ð¿ÐŸÐ»ÑÑОлПÑÑ, МП ÑкПÑей вÑегП егП гЎе-ÑП ÐœÑжМП ÑкÑаМОÑПваÑÑ, пПÑÐŸÐŒÑ ÑÑП гÑгл ПÑÐŽÐ°ÐµÑ ÐŸÑÐžÐ±ÐºÑ Ð°Ð²ÑПÑОзаÑОО).
proxy_set_header Authorization 'Bearer $1';
# РвÑе, ПÑÑалПÑÑ ÐŸÑпÑавОÑÑ Ð·Ð°Ð¿ÑÐŸÑ Ð³ÑÐ³Ð»Ñ Ð¿ÐŸ ÑаМее ÑПбÑÐ°ÐœÐœÐŸÐŒÑ ÐœÐ°ÐŒÐž аЎÑеÑÑ.
proxy_pass $download_url;
# Ð ÑÑПб Ñ Ð¿ÐŸÐ»ÑзПваÑÐµÐ»Ñ Ð¿ÑО ÑкаÑОваМОО ПÑПбÑазОлПÑÑ Ð¿ÑавОлÑМПе ÐžÐŒÑ Ñайла ÐŒÑ ÐŽÐŸÐ±Ð°Ð²ÐžÐŒ ÑППÑвеÑÑÑвÑÑÑОй загПлПвПк.
add_header Content-Disposition $content_disposition;
# ÐпÑОПМалÑМП ЌПжМП пПÑбОÑаÑÑ ÐœÐµÐœÑжМÑе МаЌ загПлПвкО ÐŸÑ Ð³Ñгла.
proxy_hide_header Content-Disposition;
proxy_hide_header Alt-Svc;
proxy_hide_header Expires;
proxy_hide_header Cache-Control;
proxy_hide_header Vary;
proxy_hide_header X-Goog-Hash;
proxy_hide_header X-GUploader-UploadID;
}
ááŸááºáá»ááºáá»á¬ážááá«áá² áá¬ážááŸááºážá¡ááá¯ááᯠspoiler á¡á±á¬ááºááœáẠááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
location ~* ^/google_drive/(.+)$ {
internal;
limit_rate 1m;
resolver 8.8.8.8;
set $download_url https://www.googleapis.com/drive/v3/files/$upstream_http_file_id?alt=media;
set $content_disposition 'attachment; filename="$upstream_http_filename"';
proxy_max_temp_file_size 0;
proxy_set_header Authorization 'Bearer $1';
proxy_pass $download_url;
add_header Content-Disposition $content_disposition;
proxy_hide_header Content-Disposition;
proxy_hide_header Alt-Svc;
proxy_hide_header Expires;
proxy_hide_header Cache-Control;
proxy_hide_header Vary;
proxy_hide_header X-Goog-Hash;
proxy_hide_header X-GUploader-UploadID;
}
á€áá»á±á¬áºááœáŸááºááŸá¯á¡á¬ážáá¯á¶ážááᯠá á®áá¶ááá·áºááœá²ááẠáá»áœááºá¯ááºááá¯á·ááẠáá¬ááºááœáŸááºážáá±ážáá±áá«áááºá
á¥ááá¬á¡á¬áž PHP ááŒáá·áº áá±ážáááºááŒá áºááŒá®áž á¡áááºážáá¯á¶áž kit ááŒáá·áº ááááºáá±ážáá«áááºá á¡ááŒá¬ážáá¬áá¬á áá¬ážáá áºáá¯áá¯ááŸáá·áº á¡ááœá±á·á¡ááŒá¯á¶ááŸááá° áááºáá°áááᯠáá»áœááºá¯ááºáááá°áá¬ááᯠá¡áá¯á¶ážááŒá¯á á€ááá¹áááᯠáá±á«ááºážá ááºážááá¯ááºáááá·áºáááºáᯠáááºáá«áááºá
<?php
# ТПкеМ ÐŽÐ»Ñ Google Drive Api.
define('TOKEN', '*****');
# ID Ñайла Ма гÑгл ЎОÑке
$fileId = 'abcdefghijklmnopqrstuvwxyz1234567890';
# ÐпÑОПМалÑМП, МП Ñак как ÐŒÑ ÐœÐµ пеÑеЎаеЌ МОкакОÑ
ЎаММÑÑ
- пПÑÐµÐŒÑ Ð±Ñ Ðž МеÑ?
http_response_code(204);
# ÐаЎаЎОЌ загПлПвПк c ID Ñайла (в кПМÑОгаÑ
nginx ÐŒÑ Ð¿ÐŸÑПЌ пПлÑÑОЌ егП как $upstream_http_file_id).
header('File-Id: ' . $fileId);
# РзагПлПвПк Ñ ÐžÐŒÐµÐœÐµÐŒ Ñайла (ÑППÑвеÑÑÑвеММП $upstream_http_filename).
header('Filename: ' . 'test.zip');
# ÐÐœÑÑÑеММОй ÑеЎОÑекÑ. РеÑе в аЎÑеÑе ÐŒÑ Ð¿ÐµÑеЎаЎОЌ ÑПкеМ, ÑÐŸÑ ÑаЌÑй, ÑÑП ÐŒÑ Ð¿ÐŸÐ»ÑÑаеЌ Оз $1 в nginx.
header('X-Accel-Redirect: ' . rawurlencode('/google_drive/' . TOKEN));
ááááºáá»á¬ážááá¯
áá±áá°áá»á¡á¬ážááŒáá·áºá á€áááºážáááºážááẠáááºááá·áº cloud ááá¯ááŸá±á¬ááºááŸá¯á០áá¯á¶ážá
áœá²áá°áá»á¬ážáᶠááá¯ááºáá»á¬ážááŒáá·áºáá»á®ááẠááœááºáá°á
á±áááºá ááŸááºáá«áááºá ááŒá±ážáááºážá
ᬠááá¯á·ááá¯áẠVK ááŸáááºá (ááá¯ááºá¡ááœááºá¡á
á¬ážááẠá€ááá¯ááŸá±á¬ááºááŸá¯á ááœáá·áºááŒá¯áá¬ážáá±á¬á¡ááœááºá¡á
á¬ážááẠááá»á±á¬áºááœááºá
á±á)á á¡áá¬ážáá° á¡ááŒá¶áá
áºáᯠááá²á·áááºá
ááá¯á áá¯ááºáá²á·á¡ááœááºáá»á±ážáá°ážáááºáá«áááºá áá»áœááºá¯ááºááá¬ááºáááºážááẠááá·áºá¡ááœáẠá¡áááºážáá¯á¶áž á áááºáááºá á¬ážá áᬠááá¯á·ááá¯áẠá¡áá¯á¶ážáááºáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá
source: www.habr.com