nginx เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ—เฉ‚เจ—เจฒ เจกเจฐเจพเจˆเจต เจคเฉ‹เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฐเจกเจฃเจพ

prehistory

เจ…เจœเจฟเจนเจพ เจนเฉ€ เจนเฉ‹เจ‡เจ† เจนเฉˆ เจ•เจฟ เจฎเฉˆเจจเฉ‚เฉฐ เจ•เจฟเจคเฉ‡ 1.5 TB เจคเฉ‹เจ‚ เจตเฉฑเจง เจกเฉ‡เจŸเจพ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจธเฉ€, เจ…เจคเฉ‡ เจ†เจฎ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจฒเจฟเฉฐเจ• เจฐเจพเจนเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเจจ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจธเฉ€เฅค เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฐเจตเจพเจ‡เจคเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจฆเฉ€ เจ…เจœเจฟเจนเฉ€ เจฎเจพเจคเจฐเจพ เจตเฉ€เจกเฉ€เจเจธ เจจเฉ‚เฉฐ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจ•เจฟเจฐเจพเจ เจฆเฉ€ เจฒเจพเจ—เจค เจœเฉ‹ เจ•เจฟ "เจ•เจฐเจจ เจฒเจˆ เจ•เฉเจ เจจเจนเฉ€เจ‚" เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจฆเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฌเจœเจŸ เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจธเจผเจพเจฎเจฒ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ…เจคเฉ‡ เจธเจฐเฉ‹เจค เจกเฉ‡เจŸเจพ เจคเฉ‹เจ‚ เจฎเฉ‡เจฐเฉ‡ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• VPS 400GB SSD เจธเฉ€, เจœเจฟเฉฑเจฅเฉ‡, เจญเจพเจตเฉ‡เจ‚ เจฎเฉˆเจ‚ เจšเจพเจนเฉเฉฐเจฆเจพ เจธเฉ€, เจฎเฉˆเจ‚ เจฌเจฟเจจเจพเจ‚ เจจเฉเจ•เจธเจพเจจ เจฐเจนเจฟเจค เจธเฉฐเจ•เฉเจšเจจ เจฆเฉ‡ 1.5TB เจšเจฟเฉฑเจคเจฐ เจจเจนเฉ€เจ‚ เจชเจพ เจธเจ•เจฆเจพ เจธเฉ€, เจ‡เจน เจธเจซเจฒ เจนเฉ‹เจตเฉ‡เจ—เจพ.

เจ…เจคเฉ‡ เจซเจฟเจฐ เจฎเฉˆเจจเฉ‚เฉฐ เจฏเจพเจฆ เจ†เจ‡เจ† เจ•เจฟ เจœเฉ‡เจ•เจฐ เจฎเฉˆเจ‚ เจ—เฉ‚เจ—เจฒ เจกเจฐเจพเจˆเจต เจคเฉ‹เจ‚ เจœเฉฐเจ• เจจเฉ‚เฉฐ เจฎเจฟเจŸเจพเจ‰เจ‚เจฆเจพ เจนเจพเจ‚, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‰เจน เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจœเฉ‹ เจธเจฟเจฐเจซ เจตเจฟเฉฐเจกเฉ‹เจœเจผ เจเจ•เจธเจชเฉ€ 'เจคเฉ‡ เจšเฉฑเจฒเจฃเจ—เฉ‡, เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจšเฉ€เจœเจผเจพเจ‚ เจœเฉ‹ เจ‰เจจเฉเจนเจพเจ‚ เจฆเจฟเจจเจพเจ‚ เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจกเจฟเจตเจพเจˆเจธ เจคเฉ‹เจ‚ เจฆเฉ‚เจœเฉ‡ เจกเจฟเจตเจพเจˆเจธ 'เจคเฉ‡ เจœเจพ เจฐเจนเฉ€เจ†เจ‚ เจนเจจ เจœเจฆเฉ‹เจ‚ เจ‡เฉฐเจŸเจฐเจจเฉˆเจŸ เจ‡เฉฐเจจเจพ เจคเฉ‡เจœเจผ เจจเจนเฉ€เจ‚ เจธเฉ€ เจฌเฉ‡เจ…เฉฐเจค ( เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจตเจฐเจšเฉเจ…เจฒ เจฌเจพเจ•เจธ เจฆเฉ‡ เจ‰เจน 10-20 เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ เจตเจฟเฉฑเจš เจจเฉ‹เจธเจŸเจพเจฒเจœเจฟเจ• เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ เจนเฉ‹เจฐ เจ•เฉ‹เจˆ เจฎเฉเฉฑเจฒ เจนเฉ‹เจฃ เจฆเฉ€ เจธเฉฐเจญเจพเจตเจจเจพ เจจเจนเฉ€เจ‚ เจธเฉ€), เจซเจฟเจฐ เจธเจญ เจ•เฉเจ เจฌเจนเฉเจค เจšเฉฐเจ—เฉ€ เจคเจฐเฉเจนเจพเจ‚ เจซเจฟเฉฑเจŸ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจคเฉเจฐเฉฐเจค เจ•เจฐเจจเจพ. เจ…เจคเฉ‡ เจ‡เจธ เจฒเจˆ, เจเจชเฉ€เจ†เจˆ เจจเฉ‚เฉฐ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจธเฉฐเจ–เจฟเจ† เจฆเฉ€ เจธเฉ€เจฎเจพ เจจเฉ‚เฉฐ เจคเฉ‹เฉœเจฆเฉ‡ เจนเฉ‹เจ (เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ, เจคเจ•เจจเฉ€เจ•เฉ€ เจธเจนเจพเจ‡เจคเจพ เจจเฉ‡ เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจธเจฎเฉฑเจธเจฟเจ† เจฆเฉ‡ เจชเฉเจฐเจคเฉ€ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจ•เฉ‹เจŸเจพ 100 เจธเจ•เจฟเฉฐเจŸเจพเจ‚ เจตเจฟเฉฑเจš 10 เจคเฉฑเจ• เจตเจงเจพ เจฆเจฟเฉฑเจคเจพ), เจกเฉ‡เจŸเจพ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจ‡เจธเจฆเฉ€ เจ…เจ—เจฒเฉ€ เจคเฉˆเจจเจพเจคเฉ€ เจฆเฉ‡ เจธเจฅเจพเจจ เจคเฉ‡ เจชเฉเจฐเจตเจพเจน เจ•เฉ€เจคเจพ เจ—เจฟเจ†เฅค .

เจธเจญ เจ•เฉเจ เจšเฉฐเจ—เจพ เจœเจพเจชเจฆเจพ เจนเฉˆ, เจชเจฐ เจนเฉเจฃ เจ‡เจธเจจเฉ‚เฉฐ เจ…เฉฐเจคเจฎ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจคเฉฑเจ• เจชเจนเฉเฉฐเจšเจพเจ‰เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ. เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจธเจฐเฉ‹เจคเจพเจ‚ เจจเฉ‚เฉฐ เจฐเฉ€เจกเจพเจ‡เจฐเฉˆเจ•เจŸ เจ•เฉ€เจคเฉ‡, เจชเจฐ เจ‡เจธ เจฒเจˆ เจ•เจฟ เจ•เฉ‹เจˆ เจตเจฟเจ…เจ•เจคเฉ€ เจธเจฟเจฐเจซเจผ "เจกเจพเจŠเจจเจฒเฉ‹เจก" เจฌเจŸเจจ เจจเฉ‚เฉฐ เจฆเจฌเจพเจตเฉ‡ เจ…เจคเฉ‡ เจ–เจœเจผเจพเจจเจšเฉ€ เจซเจพเจˆเจฒ เจฆเจพ เจ–เฉเจธเจผเจนเจพเจฒ เจฎเจพเจฒเจ• เจฌเจฃ เจœเจพเจตเฉ‡เฅค

เจ‡เฉฑเจฅเฉ‡, เจฐเฉฑเจฌ เจฆเฉเจ†เจฐเจพ, เจฎเฉˆเจ‚ เจนเจฐ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ‡ เจฆเฉเฉฑเจ–เจพเจ‚ เจตเจฟเฉฑเจš เจ—เจฟเจ†. เจชเจนเจฟเจฒเจพเจ‚ เจ‡เจน AmPHP เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจ•เฉเจฐเจฟเจชเจŸ เจธเฉ€, เจชเจฐ เจฎเฉˆเจ‚ เจ‡เจธ เจฆเฉเจ†เจฐเจพ เจฌเจฃเจพเจ เจ—เจ เจฒเฉ‹เจก เจคเฉ‹เจ‚ เจธเฉฐเจคเฉเจธเจผเจŸ เจจเจนเฉ€เจ‚ เจธเฉ€ (เจธเจผเฉเจฐเฉ‚เจ†เจค เจตเจฟเฉฑเจš 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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹