Te tohatoha i nga konae mai i a Google Drive ma te whakamahi i te nginx

prehistory

Ko te mea noa i hiahia ahau ki te penapena neke atu i te 1.5 TB o nga raraunga ki tetahi waahi, me te whakarato i te kaha mo nga kaiwhakamahi noa ki te tango ma te hononga hono. I te mea i nga wa o mua ka haere te maha o nga mahara ki te VDS, ko te utu mo te riihi kaore i te tino uru ki roto i te tahua kaupapa mai i te waahanga "kaore he mahi", mai i nga raraunga puna he VPS 400GB SSD ahau, kei hea, ahakoa ahau. i hiahia ahau, kare e taea e au te whakatakoto i te 1.5TB o nga whakaahua me te kore e pupuhi korekore ka angitu.

Na ka mahara ahau ki te mukua e ahau nga paraurehe mai i te Google Drive, penei i nga kaupapa ka haere noa i runga i te Windows XP, me etahi atu mea kua neke mai i tetahi taputapu ki tetahi atu mai i nga ra kaore i tino tere te Ipurangi kaore he mutunga ( hei tauira, ko enei momo 10-20 o te pouaka mariko kaore pea he uara ke atu i te nostalgic), katahi ka pai nga mea katoa. Kare i roa te korero. Na, ko te pakaru i te rohe mo te maha o nga tono ki te api (na te mea, ko te tautoko hangarau me te kore he raru ka piki ake te motunga o nga tono mo ia kaiwhakamahi ki te 100 i roto i te 10 hēkona), ka tere te rere o nga raraunga ki te waahi o tana tukunga atu. .

He pai nga mea katoa, engari inaianei me tuku atu ki te kaiwhakamahi mutunga. I tua atu, kaore he whakarereketanga ki etahi atu rauemi, engari kia pehi noa te tangata i te paatene "Tikiake" ka waiho hei rangatira harikoa o te konae taonga.

I konei, na te Atua, i uru ahau ki nga tini raruraru. I te tuatahi he tuhi i roto i te AmPHP, engari kaore au i makona ki te uta i mahia e ia (he peke koi i te timatanga ki te 100% te kai matua). Na ka uru mai te takai riipene mo ReactPHP, he pai ki aku hiahia mo te maha o nga huringa PTM kua pau, engari kaore i tino tere taku hiahia (i puta mai ka taea e koe te whakaiti noa i te waa waea. curl_multi_select, engari he ahua kakai to tatou rite ki te whiringa tuatahi). I ngana ano ahau ki te tuhi i tetahi ratonga iti ki Rust, a he tere te mahi (he mea miharo na te mea i mahi, na taku mohiotanga), engari i hiahia ahau kia nui ake, a he uaua ki te whakarite. I tua atu, ko enei otinga katoa he rerekee te whakautu, a ka hiahia ahau ki te whai i te waa ka mutu te tango i nga konae me te tino tika.

I te nuinga o te waa, he kopikopiko mo te wa poto, engari i whai hua. Tae noa ki tetahi ra ka puta mai he whakaaro he mea whakamiharo i roto i tona haurangi: nginx, i roto i te ariā, ka taea e au te mahi i taku e hiahia ana, te mahi tere, me te tuku i nga momo rereke katoa me te whirihoranga. Me ngana tatou - me pehea te mahi? A, i muri i te haurua o te ra o te rapu haere tonu, ka puta mai he otinga e mahi pai ana mo etahi marama me te tutuki i aku whakaritenga katoa.

Te whakatu 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;
}

He putanga poto kaore he korero ka kitea i raro i te kaipahua

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;
}

Kei te tuhi matou i tetahi tuhinga hei whakahaere i enei hari katoa

Ka noho te tauira ki te PHP me te tuhi me te iti o te kete. Ki taku whakaaro ka taea e te tangata e mohio ana ki tetahi atu reo ki te whakauru i tenei waahanga ma te whakamahi i taku tauira.

<?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));

Ngā putanga

I te nuinga o te waa, he maamaa tenei tikanga ki te whakarite i te tohatoha o nga konae ki nga kaiwhakamahi mai i te rokiroki kapua. Ae, ahakoa mai i te waea waea, i te VK ranei, (mehemea kaore te rahi o te konae e nui ake i te rahinga e whakaaetia ana o tenei rokiroki). He rite taku whakaaro ki tenei, engari karekau au i kite i nga konae tae atu ki te 2GB, kaore ano kia kitea he tikanga, he waahanga ranei mo te whakapiri i nga whakautu mai i te awa whakarunga, me te tuhi i etahi momo takai mo tenei kaupapa, he mahi pohehe.

Mauruuru koe mo to aro. Te ti'aturi nei au he ahua pai, he whai hua ranei taku korero ki a koe.

Source: will.com

Tāpiri i te kōrero