แฌแแแแแกแขแแ แแ
แแกแ แแแฎแแ, แ แแ แแแแญแแ แแ แกแแแแ 1.5 แขแ-แแ แแแขแ แแแแแชแแแแแแก แจแแแแฎแแ แแ แแกแแแ แฉแแแฃแแแแ แแแ แแแแฎแแแ แแแแแแแกแแแแก แแแกแ แแแแแแขแแแ แแแแก แจแแกแแซแแแแแแแ แแแ แแแแแ แ แแแแแแก แกแแจแฃแแแแแแ. แแแแก แแแแ, แ แแ แแแฎแกแแแ แแแแก แแกแแแ แ แแแแแแแแ แขแ แแแแชแแฃแแแ แแแแแก VDS-แแ, แแแฅแแ แแแแแแก แฆแแ แแแฃแแแแ, แ แแแแแแช แแ แช แแฃ แแกแ แแแแแ แจแแแแก แแ แแแฅแขแแก แแแฃแฏแแขแจแ "แแ แแคแแ แแ แแแกแแแแแแแแแ" แแแขแแแแ แแแแแ, แแ แฌแงแแ แแก แแแแแชแแแแแแแแ แแฅแแแแ VPS 400 GB SSD, แกแแแแช, แแฃแแแแช แแ. แแแแแแแ, 1.5 แขแ แแแแแกแแฎแฃแแแแ แแแ แแแแแ แฃแแแแแแแ แแ แจแแแฃแแจแแแก แแแ แแจแ แแแแแแ.
แจแแแแแ แแแแแฎแกแแแแ, แ แแ แแฃ แฌแแจแแแ แฃแกแแ แแแแแ Google Drive-แแแแ, แ แแแแ แแชแแ แแ แแแ แแแแแ, แ แแแแแแแช แแฎแแแแ Windows XP-แแ แแแฃแจแแแแแก แแ แกแฎแแ แ แแ, แ แแช แแแแแแแแแ แแ แแ แแแฌแงแแแแแแแแแแ แแแแ แแแ แแ แแ แแแแแ, แ แแแแกแแช แแแขแแ แแแขแ แแ แช แแกแ แกแฌแ แแคแ แแงแ, แจแแฃแแฆแฃแแแแ ( แแแแแแแแแ, แแแ แขแฃแแแฃแ แ แงแฃแแแก แแ 10-20 แแแ แกแแแก แแแแแแแแ แกแแแแ แแฃแแแ, แ แแ แ แแแแ แกแฎแแ แแแแจแแแแแแแ แฐแฅแแแแแก, แแแ แแ แแแกแขแแแแแแกแ), แแแจแแ แงแแแแแคแแ แ แซแแแแแ แแแ แแแ แฃแแแ แแแแ แแแก. แแแ แ แแ แแ แแก แแแแฅแแแแ. แแกแ แ แแ, api-แแ แแแแฎแแแแแก แ แแแแแแแแแก แแแแแขแแก แแแ แฆแแแแแ (แกแฎแแแแ แจแแ แแก, แขแแฅแแแแฃแ แแ แแฎแแ แแแญแแ แแ แฃแแ แแแแแแแ แแแแแ แแ แแแแ แแแแฎแแแ แแแแแก แแแแฎแแแแแก แแแแขแ 100-แแแ 10 แฌแแแจแ), แแแแแชแแแแแ แกแฌแ แแคแแ แแแแแแแแแแแ แแแกแ แจแแแแแแแ แแแแแแแแแแก แแแแแแแ. .
แ แแแแ แช แฉแแแก, แงแแแแแคแแ แ แแแ แแแ, แแแแ แแ แแฎแแ แกแแญแแ แแ แกแแแแแแ แแแแฎแแแ แแแแแกแแแแก แแแแแชแแแ. แฃแคแ แ แแแขแแช, แกแฎแแ แ แแกแฃแ แกแแแแ แแแแแแแกแแแแ แแแแแก แแแ แแจแ, แแแแ แแ แแกแ, แ แแ แแแแแแแแ แฃแแ แแแแ แแแแญแแ แแก แฆแแแแแก "แฉแแแแขแแแ แแแ" แแ แแแฎแแแก แซแแแ แคแแกแ แคแแแแแก แแแแแแแ แ แแคแแแแแแ.
แแ, แฆแแแ แแ, แงแแแแแแแแ แฃแแแแฃแ แแแแจแ แฌแแแแแ. แแแแแแแ แแก แแงแ แกแแ แแแขแ AmPHP-แจแ, แแแแ แแ แแ แแ แแแงแแแ แแแแงแแคแแแ แแแก แแแแ แจแแฅแแแแแ แแแขแแแ แแแแ (แแแแแแ แ แแแฎแขแแแ แแแกแแฌแงแแกแจแ 100% แซแแ แแแแแ แแแฎแแแ แแแแแแ). แจแแแแแ แแแแฅแแแแแ ReactPHP-แแก แกแแฎแแแแ, แ แแแแแแช แกแแแแแแ แฏแแแแแแ แฉแแแก แกแฃแ แแแแแแจแ แแแฎแแแ แแแฃแแ 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;
}
แแแแแ แแแ แกแแ แแแแแแขแแ แแแแก แแแ แแจแ แจแแแแซแแแแ แแแฎแแ แกแแแแแแ แแก แฅแแแจ
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-แจแ แแ แจแแแแแแฃแแแ แแแแฌแแ แแแ แแแแแแแแฃแ แ แแแแ แแแแ. แแคแแฅแ แแ, แแแกแแช แแฅแแก แแแแแชแแแแแแ แกแฎแแ แแแแแ, แจแแซแแแแก แแ แแแแงแแคแแแแแแก แแแขแแแ แแ แแแแก แฉแแแ แแแแแแแแแก แแแแแงแแแแแแ.
<?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));
แจแแแแแแแ
แแแแแแแ, แแก แแแแแแ แกแแแแแแ แแแแแแแแแก แคแแแแแแแก แแแแแฌแแแแแแก แแแแฎแแแ แแแแแแก แแแแแกแแแแ แ แฆแ แฃแแแแแแแ แกแแชแแแแแแ. แแแแฎ, แแฃแแแแช แขแแแแแ แแแแแแ แแ VK-แแแ, (แแ แแแ แแแแ, แ แแ แคแแแแแก แแแแ แแ แแฆแแแแขแแแ แแ แจแแแแฎแแแก แแแกแแจแแแ แแแแแก). แแแช แแฅแแแแ แแกแแแแกแ แแแแ
แฒแแแแแแแ แงแฃแ แแแฆแแแแกแแแแก. แแแแแ แแแฅแแก, แ แแ แฉแแแ แแกแขแแ แแ แชแแขแแแ แแแแแช แกแแแแขแแ แแกแ แแ แกแแกแแ แแแแแ แแงแ แแฅแแแแแแแก.
แฌแงแแ แ: www.habr.com