เบเบฒเบ™เปเบˆเบเบขเบฒเบเป„เบŸเบฅเปŒเบˆเบฒเบ Google Drive เป‚เบ”เบเปƒเบŠเป‰ nginx

เบ›เบฐเบงเบฑเบ”เบชเบฒเบ”

เบกเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบเบเบงเปˆเบฒ 1.5 TB เบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡, เปเบฅเบฐเบเบฑเบ‡เบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบˆเบฐเบ”เบฒเบงเป‚เบซเบฅเบ”เบกเบฑเบ™เบœเปˆเบฒเบ™เบ—เบฒเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป‚เบ”เบเบเบปเบ‡. เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ›เบฐเบฅเบดเบกเบฒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ™เบตเป„เบ›เบซเบฒ VDS, เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบปเปˆเบฒเบ—เบตเปˆเบšเปเปˆเบกเบตเบซเบผเบฒเบเบขเบนเปˆเปƒเบ™เบ‡เบปเบšเบ›เบฐเบกเบฒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบˆเบฒเบเบ›เบฐเป€เบžเบ” "เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เป€เบฎเบฑเบ”", เปเบฅเบฐเบˆเบฒเบเบ‚เปเป‰เบกเบนเบ™เปเบซเบผเปˆเบ‡เบ‚เป‰เบญเบเบกเบต VPS 400GB SSD, เบšเปˆเบญเบ™เบ—เบตเปˆ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ‚เป‰เบญเบ. เบ•เป‰เบญเบ‡เบเบฒเบ™, เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบชเปˆ 1.5TB เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบšเบตเบšเบญเบฑเบ”เบชเบนเบ™เป€เบชเบเบกเบฑเบ™เบˆเบฐเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”.

เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบทเปˆเป„เบ”เป‰เบงเปˆเบฒเบ–เป‰เบฒเบ‚เป‰เบญเบเบฅเบถเบšเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบญเบญเบเบˆเบฒเบ Google Drive, เป€เบŠเบฑเปˆเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ Windows XP เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เปเบฅเบฐเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เป†เบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบˆเบฒเบเบญเบธเบ›เบฐเบเบญเบ™เบซเบ™เบถเปˆเบ‡เป„เบ›เบซเบฒเบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบกเบทเป‰เบ—เบตเปˆเบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบšเปเปˆเป„เบงเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบšเปเปˆเบˆเปเบฒเบเบฑเบ” ( เบ•เบปเบงเบขเปˆเบฒเบ‡, 10-20 เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบเปˆเบญเบ‡ virtual เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบกเบตเบกเบนเบ™เบ„เปˆเบฒเบญเบทเปˆเบ™เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบ nostalgic), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ„เบงเบ™เบˆเบฐเป€เบซเบกเบฒเบฐเบซเบผเบฒเบ. เบšเปเปˆเป„เบ”เป‰เป€เบงเบปเป‰เบฒเป„เบงเบเบงเปˆเบฒเป€เบฎเบฑเบ”. เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบฅเบฐเป€เบกเบตเบ”เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆ api (เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒเปƒเบ”เป†เป„เบ”เป‰เป€เบžเบตเปˆเบกเป‚เบ„เบ•เป‰เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบœเบนเป‰เปƒเบŠเป‰เป€เบ›เบฑเบ™ 100 เปƒเบ™ 10 เบงเบดเบ™เบฒเบ—เบต), เบ‚เปเป‰เบกเบนเบ™เป„เบ”เป‰เป„เบซเบผเป„เบ›เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบทเปˆเบกเบญเบตเบ. .

เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ”เบต, เปเบ•เปˆเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบชเบธเบ”เบ—เป‰เบฒเบ. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบญเบทเปˆเบ™เป†, เปเบ•เปˆเป€เบžเบทเปˆเบญเปƒเบซเป‰เบšเบธเบเบ„เบปเบ™เบžเบฝเบ‡เปเบ•เปˆเบเบปเบ”เบ›เบธเปˆเบก "เบ”เบฒเบงเป‚เบซเบฅเบ”" เปเบฅเบฐเบเบฒเบเป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบปเบกเบเบฝเบ”.

เบ—เบตเปˆเบ™เบตเป‰, เป‚เบ”เบเบžเบฃเบฐเป€เบˆเบปเป‰เบฒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ—เบธเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒ. เปƒเบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบฐเบ„เบดเบšเปƒเบ™ AmPHP, เปเบ•เปˆเบ‚เป‰เบญเบเบšเปเปˆเบžเปเปƒเบˆเบเบฑเบšเบเบฒเบ™เป‚เบซเบผเบ”เบ—เบตเปˆเบกเบฑเบ™เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™ (เบเบฒเบ™เบเบฐเป‚เบ”เบ”เปเบซเบผเบกเปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ–เบดเบ‡ 100% เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบซเบผเบฑเบ). เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, curl wrapper เบชเปเบฒเบฅเบฑเบš ReactPHP เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฒเบ™เบซเบผเบดเป‰เบ™, เป€เบŠเบดเปˆเบ‡เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบ„เบงเบฒเบกเบ›เบฒเบ”เบ–เบฐเบซเบ™เบฒเบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบงเบปเบ‡เบˆเบญเบ™ CPU เบ—เบตเปˆเบšเปเบฅเบดเป‚เบžเบ, เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เปƒเบซเป‰เบ„เบงเบฒเบกเป„เบงเปƒเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ (เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบซเบผเบธเบ”เบœเปˆเบญเบ™เป„เบฅเบเบฐเบเบฒเบ™เป‚เบ—. curl_multi_select, เปเบ•เปˆโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบกเบต gluttony เบ„เป‰เบฒเบโ€‹เบ„เบทโ€‹เบเบฑเบ™โ€‹เบเบฑเบšโ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹)โ€‹. เบ‚เป‰เบญเบเบเปเปˆเบžเบฐเบเบฒเบเบฒเบกเบ‚เบฝเบ™เบšเปเบฅเบดเบเบฒเบ™เบ™เป‰เบญเบเป†เปƒเบ™ Rust, เปเบฅเบฐเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เป„เบง (เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เปเบ›เบเบ—เบตเปˆเบงเปˆเบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบ, เปƒเบซเป‰เบ„เบงเบฒเบกเบฎเบนเป‰เบ‚เบญเบ‡เบ‚เป‰เบญเบ), เปเบ•เปˆเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เปเบฅเบฐเบกเบฑเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเบ›เบฑเบšเปเบ•เปˆเบ‡เบกเบฑเบ™. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ somehow strangely buffered เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡, เปเบฅเบฐเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบ•เบฒเบกเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ”เป„เบŸเบฅเปŒเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เบ”เป‰เบงเบเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ—เบตเปˆเบชเบธเบ”.

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบกเบฑเบ™เบ–เบทเบเบซเบเบฒเบšเบŠเป‰เบฒ, เปเบ•เปˆเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบ. เบˆเบปเบ™เบเปˆเบงเบฒเบกเบทเป‰เบซเบ™เบถเปˆเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเป‚เบ”เบ”เป€เบ”เบฑเปˆเบ™เปƒเบ™เบ„เบงเบฒเบกเบšเป‰เบฒเบ‚เบญเบ‡เบกเบฑเบ™: 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;
}

เบชเบฐเบšเบฑเบšเบชเบฑเป‰เบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบ„เปเบฒเป€เบซเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบžเบฒเบเปƒเบ•เป‰ 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;
}

เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบ‚เบฝเบ™ script เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบชเบธเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰

เบ•เบปเบงเบขเปˆเบฒเบ‡เบˆเบฐเบขเบนเปˆเปƒเบ™ 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));

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบˆเบฑเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเป„เบŸเบฅเปŒเปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบˆเบฒเบเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบŸเบฑเบ‡เปƒเบ”เป†. เปเบกเปˆเบ™เปเบฅเป‰เบง, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบˆเบฒเบ telegram เบซเบผเบท VK, (เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เบงเปˆเบฒเบ‚เบฐเบซเบ™เบฒเบ”เป„เบŸเบฅเปŒเบšเปเปˆเป€เบเบตเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ™เบตเป‰). เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš เบ™เบตเป‰, เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบžเบปเบšเป€เบซเบฑเบ™เป„เบŸเบฅเปŒเบชเบนเบ‡เป€เบ–เบดเบ‡ 2GB, เปเบฅเบฐเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบžเบปเบšเป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบซเบผเบทเป‚เบกเบ”เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ gluing เบ„เปเบฒเบ•เบญเบšเบˆเบฒเบเบ•เบปเป‰เบ™เบ™เป‰เปเบฒ, เปเบฅเบฐเบเบฒเบ™เบ‚เบฝเบ™เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ wrappers เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเบกเบตเป€เบซเบ”เบœเบปเบ™เปเบฎเบ‡เบ‡เบฒเบ™เบซเบผเบฒเบ.

เบ‚เบญเบšเปƒเบˆเบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเป€เบฅเบทเปˆเบญเบ‡เบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบทเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™