Сохранение единорогов с помощью раздачи изображений через nginx?

Я подумываю о том, чтобы снизить нагрузку на тяжелые экземпляры Unicorn, настроив внешний Nginx (который у меня уже есть для отображения страницы обслуживания 502 и корректной обработки IPv6-адресов) на обслуживание также запросов изображений. Цель — получить большую часть преимуществ от переноса изображений в S3 (или совместимый объектный сервис), но при этом сохранить сайт самодостаточным на моём сервере. (Это не переместит другие ресурсы сайта с Unicorn, но они кэшируются достаточно хорошо между страницами, поэтому общая нагрузка на Unicorn от них значительно меньше.)

Так же, как при указании внешнего Nginx на сокет в /var/discourse/shared, я бы обслуживал /uploads из /var/discourse/shared/$container/uploads.

На мета-форуме я не нашёл упоминаний о том, что кто-то уже делал подобное, хотя, возможно, мои навыки поиска недостаточны. Не упускаю ли я какие-то причины, по которым это может не сработать или работать плохо на практике?

Мы уже обслуживаем изображения с помощью внутреннего nginx в контейнере.

О, по крайней мере, теперь следующий человек с этой блестящей идеей сможет найти её при поиске. Большое спасибо! :grin:

Если вы хотите помочь своим единорогам, одна из действительно эффективных мер — включить CDN для вашего Discourse, так как это позволит кэшировать несколько ресурсов, обслуживаемых на единорогах, например, таблицы стилей.

Я полагаю, что включение кэширования во внешнем nginx даст тот же эффект в отношении загрузки «единорогов», без необходимости настройки CDN. Я вижу заголовки управления кэшированием для всех JavaScript-ресурсов, так что, возможно, попробую это…

… ну, я вижу, что внутренний nginx уже использует proxy_cache с 7-дневным сроком действия для запросов без ошибок:

    location ~ ^/(svg-sprite/|letter_avatar/|letter_avatar_proxy/|user_avatar|highlight-js|stylesheets|theme-javascripts|favicon/proxied|service-worker) {
      ...
      # обратите внимание: x-accel-redirect нельзя использовать с proxy_cache
      proxy_cache one;
      proxy_cache_key "$scheme,$host,$request_uri";
      proxy_cache_valid 200 301 302 7d;
      proxy_cache_valid any 1m;
      proxy_pass http://discourse;
      break;
    }

Как в таком случае CDN помогает с «единорогами»? Я вижу stylesheets в этом списке.