prehistory
Zinangochitika kuti ndikufunika kusunga deta yoposa 1.5 TB kwinakwake, ndikupatsanso mwayi kwa ogwiritsa ntchito wamba kuti azitsitsa kudzera pa ulalo wachindunji. Popeza mwamwambo zokumbukira zotere zimapita ku VDS, mtengo wake wobwereketsa womwe sunaphatikizidwe kwambiri mu bajeti ya polojekiti kuchokera kugulu la "chochita", ndipo kuchokera kugwero ndinali ndi VPS 400GB SSD, pomwe, ngakhale. ndikadafuna, sindikanatha kuyika zithunzi za 1.5TB popanda kuphatikizika kopanda kutaya zikhala bwino.
Kenako ndinakumbukira kuti ngati ndichotsa zosafunika kuchokera ku Google Drive, monga mapulogalamu omwe azingoyenda pa Windows XP, ndi zinthu zina zomwe zakhala zikuyenda kuchokera ku chipangizo china kupita ku china kuyambira masiku omwe intaneti sinali yothamanga konse popanda malire ( mwachitsanzo, matembenuzidwe a 10-20 a bokosi laling'ono sakanatha kukhala ndi phindu lililonse kupatula nostalgic), ndiye zonse ziyenera kugwirizana bwino. Zosavuta kuzinena koma zovuta kuchita. Ndipo kotero, kudutsa malire pa chiwerengero cha zopempha kwa api (mwa njira, chithandizo chaumisiri popanda mavuto chinawonjezera chiwerengero cha zopempha kwa wogwiritsa ntchito mpaka 100 mu masekondi 10), deta inathamangira kumalo omwe amatumizidwa. .
Chilichonse chikuwoneka bwino, koma tsopano chiyenera kuperekedwa kwa wogwiritsa ntchito. Komanso, popanda kulozeranso kuzinthu zina, koma kuti munthu angosindikiza batani la "Koperani" ndikukhala mwiniwake wa fayilo yamtengo wapatali.
Pano, ndi Mulungu, ndinalowa mβmavuto osiyanasiyana. Poyamba inali script mu AmPHP, koma sindinakhutire ndi katundu omwe adapanga (kudumpha kwakuthwa kumayambiriro kwa 100% core pea). Kenako chokulunga chopiringizika cha ReactPHP chidayamba kuseweredwa, chomwe chimagwirizana ndi zomwe ndikufuna malinga ndi kuchuluka kwa ma CPU omwe amadyedwa, koma sanapereke liwiro pazomwe ndimafuna (zinapezeka kuti mutha kuchepetsa nthawi yoyimba foni. curl_multi_select, koma ndiye tili ndi kususuka kofanana ndi njira yoyamba ). Ndinayeseranso kulemba ntchito yaing'ono ku Rust, ndipo inagwira ntchito mofulumira (ndizodabwitsa kuti inagwira ntchito, chifukwa cha chidziwitso changa), koma ndinkafuna zambiri, ndipo zinali zovuta kuzisintha. Kuphatikiza apo, mayankho onsewa adasokoneza mayankho modabwitsa, ndipo ndimafuna kutsatira nthawi yomwe kutsitsa kwa fayilo kunatha molondola kwambiri.
Nthawi zambiri, inali yokhota kwakanthawi, koma idagwira ntchito. Mpaka tsiku lina ndinapeza lingaliro lomwe linali lodabwitsa mu misala yake: nginx, mwachidziwitso, akhoza kuchita zomwe ndikufuna, kugwira ntchito mofulumira, komanso kulola zosokoneza zamitundu yonse ndi kasinthidwe. Tiyenera kuyesa - bwanji ngati zikugwira ntchito? Ndipo patatha theka la tsiku lofufuza mosalekeza, yankho linabadwa lomwe lakhala likugwira ntchito mokhazikika kwa miyezi ingapo ndikukwaniritsa zofunikira zanga zonse.
Kukhazikitsa 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;
}
Mtundu waufupi wopanda ndemanga ukhoza kuwoneka pansi pa wowononga
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;
}
Tikulemba script kuti tisamalire chisangalalo chonsechi
Chitsanzocho chidzakhala mu PHP ndi kulembedwa mwadala ndi zida zochepa. Ndikuganiza kuti aliyense amene ali ndi chidziwitso ndi chinenero china adzatha kuphatikiza gawoli pogwiritsa ntchito chitsanzo changa.
<?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));
Zotsatira
Nthawi zambiri, njirayi imapangitsa kukhala kosavuta kukonza kugawa mafayilo kwa ogwiritsa ntchito kuchokera kumtambo uliwonse. Inde, ngakhale kuchokera pa telegalamu kapena VK, (ngati kukula kwa fayilo sikudutsa kukula kovomerezeka kwa malo osungiramo). Ndinali ndi lingaliro lofanana ndi
Zikomo chifukwa chakumvetsera. Ndikukhulupirira kuti nkhani yanga inali yosangalatsa kapena yothandiza kwa inu.
Source: www.habr.com