Kev faib cov ntaub ntawv los ntawm Google Drive siv nginx

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 qhov no, tab sis hmoov tsis kuv tuaj hla cov ntaub ntawv mus txog 2GB, thiab kuv tseem tsis tau pom ib txoj hauv kev los yog cov qauv rau gluing cov lus teb los ntawm cov dej ntws, thiab sau qee hom wrappers rau qhov project no tsis tsim nyog siv zog.

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

Ntxiv ib saib