Π Π°Π·Π΄Π°Π΅ΠΌ Ρ„Π°ΠΉΠ»Ρ‹ с Google Drive посрСдством nginx

ΠŸΡ€Π΅Π΄Ρ‹ΡΡ‚ΠΎΡ€ΠΈΡ

Π’Π°ΠΊ ΡƒΠΆ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ½Π΅ Π±Ρ‹Π»ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ 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, (ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ допустимый Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρƒ этого Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°). Π£ мСня Π±Ρ‹Π»Π° идСя, подобная этой, Π½ΠΎ ΠΊ соТалСнию Ρƒ мСня ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ 2Π³Π±, Π° способа ΠΈΠ»ΠΈ модуля для склСйки ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΈΠ· upstream я ΠΏΠΎΠΊΠ° Π½Π΅ нашСл, ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΆΠ΅ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π²Ρ€Π°ΠΏΠΏΠ΅Ρ€Ρ‹ для этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½ΠΎ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎ.

Бпасибо Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. НадСюсь, моя история Π±Ρ‹Π»Π° Ρ…ΠΎΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΌ интСрСсна ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com