nginx เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ Google เชกเซเชฐเชพเช‡เชตเชฎเชพเช‚เชฅเซ€ เชซเชพเช‡เชฒเซ‹เชจเซเช‚ เชตเชฟเชคเชฐเชฃ

เชชเซเชฐเชพเช—เซˆเชคเชฟเชนเชพเชธเชฟเช•

เชเชตเซเช‚ เชฌเชจเซเชฏเซเช‚ เช•เซ‡ เชฎเชพเชฐเซ‡ เช•เซเชฏเชพเช‚เช• 1.5 TB เชฅเซ€ เชตเชงเซ เชกเซ‡เชŸเชพ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช…เชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‡ เชธเซ€เชงเซ€ เชฒเชฟเช‚เช• เชฆเซเชตเชพเชฐเชพ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เชชเชฃ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเซ€ เชชเชกเชถเซ‡. เชชเชฐเช‚เชชเชฐเชพเช—เชค เชฐเซ€เชคเซ‡ เช†เชŸเชฒเซ€ เชฎเชพเชคเซเชฐเชพเชฎเชพเช‚ เชฎเซ‡เชฎเชฐเซ€ เชตเซ€เชกเซ€เชเชธเชฎเชพเช‚ เชœเชพเชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เชญเชพเชกเซ‡ เช†เชชเชตเชพเชจเซ‹ เช–เชฐเซเชš เชœเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชœเซ‡เชŸเชฎเชพเช‚ "เช•เชฐเชตเชพเชจเซเช‚ เช•เช‚เชˆ เชจเชฅเซ€" เช•เซ‡เชŸเซ‡เช—เชฐเซ€เชฎเชพเช‚เชฅเซ€ เช–เซ‚เชฌ เชœ เชธเชฎเชพเชตเชฟเชทเซเชŸ เชจเชฅเซ€, เช…เชจเซ‡ เชธเซเชฐเซ‹เชค เชกเซ‡เชŸเชพเชฎเชพเช‚เชฅเซ€ เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ VPS 400GB SSD เชนเชคเซเช‚, เชœเซเชฏเชพเช‚, เชœเซ‹ เชนเซเช‚ เช‡เชšเซเช›เชคเชพ เชนเชคเชพ, เชนเซเช‚ เชฒเซ‹เชธเชฒเซ‡เชธ เช•เชฎเซเชชเซเชฐเซ‡เชถเชจ เชตเชฟเชจเชพ 1.5TB เช‡เชฎเซ‡เชœ เชฎเซ‚เช•เซ€ เชถเช•เซเชฏเซ‹ เชจเชฅเซ€ เชคเซ‡ เชธเชซเชณ เชฅเชถเซ‡.

เช…เชจเซ‡ เชชเช›เซ€ เชฎเชจเซ‡ เชฏเชพเชฆ เช†เชตเซเชฏเซเช‚ เช•เซ‡ เชœเซ‹ เชนเซเช‚ Google เชกเซเชฐเชพเช‡เชตเชฎเชพเช‚เชฅเซ€ เชœเช‚เช• เช•เชพเชขเซ€ เชจเชพเช–เซเช‚ เช›เซเช‚, เชœเซ‡เชฎ เช•เซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธ เช•เซ‡ เชœเซ‡ เชซเช•เซเชค Windows XP เชชเชฐ เชœ เชšเชพเชฒเชถเซ‡, เช…เชจเซ‡ เช…เชจเซเชฏ เชตเชธเซเชคเซเช“ เชœเซ‡ เชเช• เช‰เชชเช•เชฐเชฃเชฅเซ€ เชฌเซ€เชœเชพ เช‰เชชเช•เชฐเชฃ เชชเชฐ เช–เชธเซ‡เชกเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซ€ เช›เซ‡ เชคเซ‡ เชฆเชฟเชตเชธเซ‹เชฅเซ€ เชœเซเชฏเชพเชฐเซ‡ เช‡เชจเซเชŸเชฐเชจเซ‡เชŸ เชเชŸเชฒเซเช‚ เชเชกเชชเซ€ เชจเชนเซ‹เชคเซเช‚ เชคเซเชฏเชพเชฐเซ‡ เช…เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชจเชฅเซ€ ( เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฌเซ‹เช•เซเชธเชจเชพ เชคเซ‡ 10-20 เชตเชฐเซเชเชจเชฎเชพเช‚ เชจเซ‹เชธเซเชŸเชพเชฒเซเชœเชฟเช• เชธเชฟเชตเชพเชฏ เช…เชจเซเชฏ เช•เซ‹เชˆ เชฎเซ‚เชฒเซเชฏ เชนเซ‹เชตเชพเชจเซ€ เชถเช•เซเชฏเชคเชพ เชจเชฅเซ€), เชคเซ‹ เชชเช›เซ€ เชฌเชงเซเช‚ เช–เซ‚เชฌ เชœ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เชซเชฟเชŸ เชฅเชตเซเช‚ เชœเซ‹เชˆเช. เช•เชฐเซเชฏเซเช‚ เช•เชฐเชคเชพเช‚ เชตเชนเซ‡เชฒเซเช‚ เช•เชนเซเชฏเซเช‚. เช…เชจเซ‡ เชคเซ‡เชฅเซ€, api เชจเซ‡ เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ€ เชธเช‚เช–เซเชฏเชพเชจเซ€ เชฎเชฐเซเชฏเชพเชฆเชพเชจเซ‡ เชคเซ‹เชกเซ€เชจเซ‡ (เชฎเชพเชฐเซเช— เชฆเซเชตเชพเชฐเชพ, เช•เซ‹เชˆเชชเชฃ เชธเชฎเชธเซเชฏเชพ เชตเชฟเชจเชพ เชคเช•เชจเซ€เช•เซ€ เชธเชชเซ‹เชฐเซเชŸเซ‡ 100 เชธเซ‡เช•เชจเซเชกเชฎเชพเช‚ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฆเซ€เช  เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ‹ เช•เซเชตเซ‹เชŸเชพ เชตเชงเชพเชฐเซ€เชจเซ‡ 10 เช•เชฐเซ€ เชฆเซ€เชงเซ‹), เชกเซ‡เชŸเชพ เชเชกเชชเชฅเซ€ เชคเซ‡เชจเชพ เชตเชงเซ เชœเชฎเชพเชตเชŸเชจเชพ เชธเซเชฅเชณเซ‡ เชตเชนเซ‡เชคเซ‹ เชฅเชฏเซ‹. .

เชฌเชงเซเช‚ เชธเชพเชฐเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชนเชตเซ‡ เชคเซ‡เชจเซ‡ เช…เช‚เชคเชฟเชฎ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชธเซเชงเซ€ เชชเชนเซ‹เช‚เชšเชพเชกเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชคเชฆเซเชชเชฐเชพเช‚เชค, เช…เชจเซเชฏ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชฐเซ€เชกเชพเชฏเชฐเซ‡เช•เซเชŸ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ, เชชเชฐเช‚เชคเซ เชœเซ‡เชฅเซ€ เชตเซเชฏเช•เซเชคเชฟ เชซเช•เซเชค "เชกเชพเช‰เชจเชฒเซ‹เชก" เชฌเชŸเชจเชจเซ‡ เชฆเชฌเชพเชตเชถเซ‡ เช…เชจเซ‡ เชญเช‚เชกเชพเชฐ เชซเชพเช‡เชฒเชจเซ‹ เช–เซเชถ เชฎเชพเชฒเชฟเช• เชฌเชจเซ€ เชœเชถเซ‡.

เช…เชนเซ€เช‚, เชญเช—เชตเชพเชจ เชฆเซเชตเชพเชฐเชพ, เชนเซเช‚ เชคเชฎเชพเชฎ เชชเซเชฐเช•เชพเชฐเชจเซ€ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“เชฎเชพเช‚ เช—เชฏเซ‹. เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชคเซ‡ เชเชเชฎเชชเซ€เชเชšเชชเซ€เชฎเชพเช‚ เชเช• เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชนเชคเซ€, เชชเชฐเช‚เชคเซ เชนเซเช‚ เชคเซ‡ เชฌเชจเชพเชตเซ‡เชฒเชพ เชญเชพเชฐเชฅเซ€ เชธเช‚เชคเซเชทเซเชŸ เชจ เชนเชคเซ‹ (100% เช•เซ‹เชฐ เชตเชชเชฐเชพเชถเชจเซ€ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชคเซ€เชตเซเชฐ เช‰เช›เชพเชณเซ‹). เชชเช›เซ€ ReactPHP เชฎเชพเชŸเซ‡ เช•เชฐเซเชฒ เชฐเซ‡เชชเชฐ เช…เชฎเชฒเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚, เชœเซ‡ CPU เชธเชพเชฏเช•เชฒเชจเซ€ เชตเชชเชฐเชพเชถเชจเซ€ เชธเช‚เช–เซเชฏเชพเชจเชพ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚ เชฎเชพเชฐเซ€ เช‡เชšเซเช›เชพเช“เชฎเชพเช‚ เชเช•เชฆเชฎ เชฌเช‚เชงเชฌเซ‡เชธเชคเซเช‚ เชนเชคเซเช‚, เชชเชฐเช‚เชคเซ เชฎเชจเซ‡ เชœเซ‡ เชœเซ‹เชˆเชคเซเช‚ เชนเชคเซเช‚ เชคเซ‡ เช—เชคเชฟ เช†เชชเซ€ เชจ เชนเชคเซ€ (เชคเซ‡ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เชคเชฎเซ‡ เชซเช•เซเชค เช•เซ‰เชฒเชฟเช‚เช—เชจเชพ เช…เช‚เชคเชฐเชพเชฒเชจเซ‡ เช˜เชŸเชพเชกเซ€ เชถเช•เซ‹ เช›เซ‹. curl_multi_select, เชชเชฐเช‚เชคเซ เชชเช›เซ€ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชชเซเชฐเชฅเชฎ เชตเชฟเช•เชฒเซเชชเชจเซ€ เชœเซ‡เชฎ เช–เชพเช‰เชงเชฐเชพเชชเชฃเซเช‚ เช›เซ‡). เชฎเซ‡เช‚ เชฐเชธเซเชŸเชฎเชพเช‚ เชเช• เชจเชพเชจเซ€ เชธเซ‡เชตเชพ เชฒเช–เชตเชพเชจเซ‹ เชชเชฃ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซเชฏเซ‹, เช…เชจเซ‡ เชคเซ‡ เช–เซ‚เชฌ เชœ เชเชกเชชเชฅเซ€ เช•เชพเชฎ เช•เชฐเซเชฏเซเช‚ (เชคเซ‡ เช†เชถเซเชšเชฐเซเชฏเชœเชจเช• เช›เซ‡ เช•เซ‡ เชคเซ‡ เช•เชพเชฎ เช•เชฐเซเชฏเซเช‚, เชฎเชพเชฐเชพ เชœเซเชžเชพเชจเชจเซ‡ เชœเซ‹เชคเชพเช‚), เชชเชฐเช‚เชคเซ เชฎเชจเซ‡ เชตเชงเซ เชœเซ‹เชˆเชคเซเช‚ เชนเชคเซเช‚, เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เชธเซเชŸเชฎเชพเช‡เช เช•เชฐเชตเซเช‚ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เชฎเซเชถเซเช•เซ‡เชฒ เชนเชคเซเช‚. เชตเชงเซเชฎเชพเช‚, เช† เชฌเชงเชพ เช‰เช•เซ‡เชฒเซ‹เช เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เชชเซเชฐเชคเชฟเชญเชพเชตเชจเซ‡ เชตเชฟเชšเชฟเชคเซเชฐ เชฐเซ€เชคเซ‡ เชฌเชซเชฐ เช•เชฐเซเชฏเซ‹, เช…เชจเซ‡ เชนเซเช‚ เชคเซ‡ เช•เซเชทเชฃเชจเซ‡ เชŸเซเชฐเซ…เช• เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชนเชคเซ‹ เชœเซเชฏเชพเชฐเซ‡ เชซเชพเช‡เชฒ เชกเชพเช‰เชจเชฒเซ‹เชก เชธเซŒเชฅเซ€ เชตเชงเซ เชธเชšเซ‹เชŸเชคเชพ เชธเชพเชฅเซ‡ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ.

เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชคเซ‡ เชฅเซ‹เชกเชพ เชธเชฎเชฏ เชฎเชพเชŸเซ‡ เช•เซเชŸเชฟเชฒ เชนเชคเซเช‚, เชชเชฐเช‚เชคเซ เชคเซ‡ เช•เชพเชฎ เช•เชฐเซเชฏเซเช‚. เชเช• เชฆเชฟเชตเชธ เชธเซเชงเซ€ เชนเซเช‚ เชเช• เชตเชฟเชšเชพเชฐ เชธเชพเชฅเซ‡ เช†เชตเซเชฏเซ‹ เชœเซ‡ เชคเซ‡เชจเซ€ เช‰เชจเซเชฎเชคเซเชคเชคเชพเชฎเชพเช‚ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชนเชคเซ‹: 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 เชฅเซ€ เชชเชฃ, (เชœเซ‹ เช•เซ‡ เชซเชพเช‡เชฒเชจเซเช‚ เช•เชฆ เช† เชธเซเชŸเซ‹เชฐเซ‡เชœเชจเชพ เช…เชจเซเชฎเชคเชฟเชชเชพเชคเซเชฐ เช•เชฆ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชจ เชนเซ‹เชฏ เชคเซ‹). เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชธเชฎเชพเชจ เชตเชฟเชšเชพเชฐ เชนเชคเซ‹ เช†, เชชเชฐเช‚เชคเซ เช•เชฎเชจเชธเซ€เชฌเซ‡ เชฎเชจเซ‡ 2GB เชธเซเชงเซ€เชจเซ€ เชซเชพเช‡เชฒเซ‹ เชฎเชณเซ‡ เช›เซ‡, เช…เชจเซ‡ เชฎเชจเซ‡ เชนเชœเซ เชธเซเชงเซ€ เช…เชชเชธเซเชŸเซเชฐเซ€เชฎ เชคเชฐเชซเชฅเซ€ เชชเซเชฐเชคเชฟเชธเชพเชฆเซ‹เชจเซ‡ เช—เซเชฒเซเช‡เช‚เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เชชเชฆเซเชงเชคเชฟ เช…เชฅเชตเชพ เชฎเซ‹เชกเซเชฏเซเชฒ เชฎเชณเซเชฏเซเช‚ เชจเชฅเซ€, เช…เชจเซ‡ เช† เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช…เชฎเซเช• เชชเซเชฐเช•เชพเชฐเชจเชพ เชฐเซ‡เชชเชฐ เชฒเช–เชตเชพเชจเซเช‚ เช—เซ‡เชฐเชตเชพเชœเชฌเซ€ เชถเซเชฐเชฎ-เชธเช˜เชจ เช›เซ‡.

เชคเชฎเชพเชฐเชพ เชงเซเชฏเชพเชจ เชฌเชฆเชฒ เช†เชญเชพเชฐ. เชฎเชจเซ‡ เช†เชถเชพ เช›เซ‡ เช•เซ‡ เชฎเชพเชฐเซ€ เชตเชพเชฐเซเชคเชพ เชคเชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซ€ เชฅเซ‹เชกเซ€ เชฐเชธเชชเซเชฐเชฆ เช…เชฅเชตเชพ เช‰เชชเชฏเซ‹เช—เซ€ เชนเชคเซ€.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹