ΠΡΠ΅Π΄ΡΡΡΠΎΡΠΈΡ
Π’Π°ΠΊ ΡΠΆ ΡΠ»ΡΡΠΈΠ»ΠΎΡΡ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΌΠ½Π΅ Π±ΡΠ»ΠΎ Π³Π΄Π΅-ΡΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ 1.5ΡΠ± Π΄Π°Π½Π½ΡΡ , Π΄Π° Π΅ΡΠ΅ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΈΡ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΏΠΎ ΠΏΡΡΠΌΠΎΠΉ ΡΡΡΠ»ΠΊΠ΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΌΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ΄ΡΡ ΡΠΆΠ΅ Π½Π° VDS, ΡΡΠΎΠΈΠΌΠΎΡΡΡ Π°ΡΠ΅Π½Π΄Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ Π² Π±ΡΠ΄ΠΆΠ΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΠ· ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Β«ΠΎΡ Π½Π΅ΡΠ΅Π³ΠΎ Π΄Π΅Π»Π°ΡΡΒ», Π° ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ» VPS 400GB SSD, ΠΊΡΠ΄Π° ΠΏΡΠΈ Π²ΡΠ΅ΠΌ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ 1.5ΡΠ± ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ Π±Π΅Π· lossless ΡΠΆΠ°ΡΠΈΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π½Π΅ ΡΠ΄Π°ΡΡΡΡ.
Π ΡΡΡ Ρ Π²ΡΠΏΠΎΠΌΠ½ΠΈΠ» ΠΏΡΠΎ ΡΠΎ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Ρ Π³ΡΠ³Π»-Π΄ΠΈΡΠΊΠ° Ρ Π»Π°ΠΌ, Π²ΡΠΎΠ΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΡΡΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Windows XP, ΠΈ ΠΏΡΠΎΡΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΡΡΡΡ Ρ ΠΌΠ΅Π½Ρ Ρ Π½ΠΎΡΠΈΡΠ΅Π»Ρ Π½Π° Π½ΠΎΡΠΈΡΠ΅Π»Ρ Ρ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ Π±ΡΠ» Π½Π΅ ΡΠ°ΠΊΠΈΠΌ Π±ΡΡΡΡΡΠΌ ΠΈ Π²ΠΎΠ²ΡΠ΅ Π½Π΅ Π±Π΅Π·Π»ΠΈΠΌΠΈΡΠ½ΡΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ 10-20 Π²Π΅ΡΡΠΈΠΉ virtual box Π²ΡΡΠ΄ Π»ΠΈ ΠΈΠΌΠ΅Π»ΠΈ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΡΠ΅Π½Π½ΠΎΡΡΡ, ΠΊΡΠΎΠΌΠ΅ Π½ΠΎΡΡΠ°Π»ΡΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ), ΡΠΎ Π²ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΠ΅Π½Ρ Π΄Π°ΠΆΠ΅ Ρ ΠΎΡΠΎΡΠΎ Π²ΠΌΠ΅ΡΡΠΈΡΡΡΡ. Π‘ΠΊΠ°Π·Π°Π½ΠΎ β ΡΠ΄Π΅Π»Π°Π½ΠΎ. Π Π²ΠΎΡ, ΠΏΡΠΎΠ±ΠΈΠ²Π°ΡΡΡ ΡΠ΅ΡΠ΅Π· Π»ΠΈΠΌΠΈΡ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ api (ΠΊΡΡΠ°ΡΠΈ, ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠ²Π΅Π»ΠΈΡΠΈΠ»Π° ΠΊΠ²ΠΎΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π° 100 ΡΠ΅ΠΊΡΠ½Π΄ Π΄ΠΎ 10 000) Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅Π·Π²ΠΎ ΠΏΠΎΡΠ΅ΠΊΠ»ΠΈ Π² ΠΌΠ΅ΡΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ Π΄ΠΈΡΠ»ΠΎΠΊΠ°ΡΠΈΠΈ.
ΠΡΠ΅ Π²ΡΠΎΠ΄Π΅ Π±Ρ ΠΈ Ρ ΠΎΡΠΎΡΠΎ, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ½Π΅ΡΡΠΈ Π΄ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ° Π΅ΡΠ΅ ΠΈ Π±Π΅Π· Π²ΡΡΠΊΠΈΡ ΡΠ°ΠΌ ΡΠ΅Π΄ΠΈΡΠ΅ΠΊΡΠΎΠ² Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅ΡΡΡΡΡ, Π° ΡΡΠΎΠ± ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ ΠΏΡΠΎΡΡΠΎ Π½Π°ΠΆΠ°Π» ΠΊΠ½ΠΎΠΏΠΎΡΠΊΡ Β«DownloadΒ» ΠΈ ΡΡΠ°Π» ΡΡΠ°ΡΡΠ»ΠΈΠ²ΡΠΌ ΠΎΠ±Π»Π°Π΄Π°ΡΠ΅Π»Π΅ΠΌ Π·Π°Π²Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.
Π’ΡΡ Ρ, Π΅ΠΉ-Π±ΠΎΠ³Ρ, ΠΏΡΡΡΠΈΠ»ΡΡ Π²ΠΎ Π²ΡΠ΅ ΡΡΠΆΠΊΠΈΠ΅. Π‘Π½Π°ΡΠ°Π»Π° ΡΡΠΎ Π±ΡΠ» ΡΠΊΡΠΈΠΏΡ Π½Π° AmPHP, Π½ΠΎ ΠΌΠ΅Π½Ρ Π½Π΅ ΡΡΡΡΠΎΠΈΠ»Π° ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠ°Ρ ΠΈΠΌ Π½Π°Π³ΡΡΠ·ΠΊΠ° (ΡΠ΅Π·ΠΊΠΈΠΉ ΡΠΊΠ°ΡΠ΅ΠΊ Π½Π° ΡΡΠ°ΡΡΠ΅ Π΄ΠΎ 100% ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΡΠ΄ΡΠ°). ΠΠΎΡΠΎΠΌ Π² Π΄Π΅Π»ΠΎ ΠΏΠΎΡΠ΅Π» Π²ΡΠ°ΠΏΠΏΠ΅Ρ curl Π΄Π»Ρ 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));
ΠΡΠΎΠ³ΠΈ
Π ΡΠ΅Π»ΠΎΠΌ Π΄Π°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π΄Π°ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΎΠ±Π»Π°ΡΠ½ΠΎΠ³ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°. ΠΠ° Ρ
ΠΎΡΡ ΠΈΠ· telegram ΠΈΠ»ΠΈ VK, (ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Ρ ΡΡΠΎΠ³ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°). Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° ΠΈΠ΄Π΅Ρ, ΠΏΠΎΠ΄ΠΎΠ±Π½Π°Ρ
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ΠΠ°Π΄Π΅ΡΡΡ, ΠΌΠΎΡ ΠΈΡΡΠΎΡΠΈΡ Π±ΡΠ»Π° Ρ ΠΎΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π°.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com