prehistory
Nws tsuas yog tshwm sim uas kuv xav tau khaws ntau dua 1.5 TB ntawm cov ntaub ntawv nyob qhov twg, thiab tseem muab lub peev xwm rau cov neeg siv zoo tib yam rub tawm ntawm qhov txuas ncaj qha. Txij li thaum ib txwm muaj ntau npaum li cas ntawm kev nco mus rau VDS, tus nqi xauj tsev uas tsis muaj ntau nyob rau hauv qhov project pob nyiaj los ntawm qeb "tsis muaj dab tsi ua", thiab los ntawm cov ntaub ntawv los ntawm kuv muaj VPS 400GB SSD, qhov twg, txawm tias kuv xav tau, kuv tsis tuaj yeem tso 1.5TB ntawm cov duab yam tsis muaj kev poob qis nws yuav ua tiav.
Thiab tom qab ntawd kuv nco qab tias yog tias kuv rho tawm cov khib nyiab los ntawm Google Drive, zoo li cov kev pab cuam uas tsuas yog khiav ntawm Windows XP, thiab lwm yam uas tau txav los ntawm ib lub cuab yeej mus rau lwm qhov txij li hnub uas Internet tsis ceev heev ntawm txhua qhov tsis txwv ( Piv txwv li, cov 10-20 versions ntawm lub thawv virtual tsis zoo li muaj nuj nqis uas tsis yog nostalgic), ces txhua yam yuav tsum haum zoo heev. Tsis tau hais sai dua li ua tiav. Thiab yog li ntawd, tawg los ntawm kev txwv ntawm tus naj npawb ntawm kev thov rau api (los ntawm txoj kev, kev txhawb nqa kev tsis muaj teeb meem tau nce quota ntawm kev thov rau ib tus neeg siv rau 100 hauv 10 vib nas this), cov ntaub ntawv sai sai ntws mus rau qhov chaw ntawm nws qhov kev xa tawm ntxiv. .
Txhua yam zoo li zoo, tab sis tam sim no nws yuav tsum tau xa mus rau tus neeg siv kawg. Ntxiv mus, tsis muaj redirects rau lwm yam kev pab, tab sis kom ib tug neeg tsuas nias lub "Download" khawm thiab dhau los ua tus tswv zoo siab ntawm cov ntaub ntawv muaj nqis.
Ntawm no, los ntawm Vajtswv, kuv tau mus rau txhua yam teeb meem. Thaum xub thawj nws yog ib tsab ntawv nyob rau hauv AmPHP, tab sis kuv tsis txaus siab rau lub load nws tsim (ib tug ntse dhia thaum pib mus rau 100% core noj). Tom qab ntawd lub curl wrapper rau ReactPHP tuaj rau hauv kev ua si, uas haum rau kuv qhov kev xav tau ntawm tus naj npawb ntawm CPU cycles noj, tab sis tsis muab qhov ceev ntawm txhua qhov kuv xav tau (nws tau muab tawm tias koj tuaj yeem txo qhov luv ntawm kev hu. curl_multi_select, tab sis tom qab ntawd peb muaj gluttony zoo ib yam li thawj qhov kev xaiv ). Kuv txawm sim sau cov kev pabcuam me me hauv Rust, thiab nws ua haujlwm sai heev (nws xav tsis thoob tias nws ua haujlwm, muab kuv txoj kev paub), tab sis kuv xav tau ntau dua, thiab nws nyuaj rau kho nws. Tsis tas li ntawd, tag nrho cov kev daws teeb meem no qee qhov txawv ntawm cov lus teb, thiab kuv xav taug qab lub sijhawm thaum cov ntaub ntawv rub tawm tau xaus nrog qhov tseeb tshaj plaws.
Feem ntau, nws tau crooked rau ib pliag, tab sis nws ua haujlwm. Txog rau ib hnub kuv tau los nrog ib lub tswv yim uas zoo kawg nkaus hauv nws qhov kev vwm: nginx, hauv txoj kev xav, tuaj yeem ua qhov kuv xav tau, ua haujlwm sai, thiab txawm tso cai rau txhua yam kev hloov pauv nrog kev teeb tsa. Peb yuav tsum sim - ua li cas yog nws ua haujlwm? Thiab tom qab ib nrab hnub ntawm kev tshawb nrhiav tsis tu ncua, kev daws teeb meem tau yug los uas tau ua haujlwm ruaj khov rau ob peb lub hlis thiab ua tau raws li txhua yam kuv xav tau.
Teeb tsa 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;
}
Ib luv luv version tsis muaj lus pom tuaj yeem pom hauv qab tus 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;
}
Peb tab tom sau ib tsab ntawv los tswj txhua qhov kev zoo siab no
Qhov piv txwv yuav nyob hauv PHP thiab txhob txwm sau nrog yam tsawg kawg nkaus ntawm cov khoom siv. Kuv xav tias txhua tus neeg uas muaj kev paub nrog lwm yam lus yuav tuaj yeem koom ua ke ntawm tshooj no siv kuv tus qauv.
<?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));
Cov txiaj ntsim tau los
Feem ntau, txoj kev no ua rau nws yooj yim heev los npaj kev faib cov ntaub ntawv rau cov neeg siv los ntawm txhua qhov huab cia. Yog, txawm tias los ntawm telegram lossis VK, (muab tias cov ntaub ntawv loj tsis pub dhau qhov tso cai loj ntawm qhov chaw cia). Kuv muaj ib lub tswv yim zoo ib yam li
Ua tsaug rau koj mloog. Kuv vam tias kuv zaj dab neeg tsawg kawg yog qhov nthuav me ntsis lossis muaj txiaj ntsig rau koj.
Tau qhov twg los: www.hab.com