В настройке сервера для одного из достаточно нагруженных проектов пришлось применить кеширование фильтра на ajax средствами NGINX и директивы proxy_store. Фильтр вкупе с каталогом на полторы сотни тысяч предложений в тесте практически «укладывал» два отдельных физических сервера с репликами БД не доходя даже до средней расчетной нагрузки на проект.
Для веб-сервера была выбрана достаточно типичная для таких ситуаций архитектура: NGINX во фронте для статики и нашего кеша, для скриптов Apache+PHP. Всё как бы заработало: кеш создавался, только NGINX из хранилища кеша в браузер отдавал какой-то бред из непонятных символов. Налицо проблема с кодировкой.
Тут наступил OK’Google и эксперименты с кодировками в конфигах, на которые в общей сложности ушло безрезультатные несколько часов. Вскоре пришло просветление, что кеш от backend-сервера пишется в ФС в бинарном виде, в таком же и отдается NGINX’ом клиенту, итог — кракозябры в окне браузера.
Что же заставляет его записываться в бинарном виде? Ведь ответ Apache2 в большинстве случаев всегда, а в нашем случае всегда, должен иметь mime-type «text/html». Ответ на эту неочевидную проблему достаточно тривиален: он приходит в сжатом виде! За сжатие в Apache2 отвечает дефолтный модуль mod_deflate, с его отключением мы получили ответ backend-сервера в текстовом виде и немного снизили нагрузку (необходимости сжатия между Apache2 и NGINX нет).
Надеюсь кому-нибудь сбережет 2-3 часа, желаю меньше «граблей» в ваших серваках.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».