Apache - это обратный прокси для моего приложения. Клиент просит http://cdn.example.com/foo/images/logo.png
:
GET /foo/images/logo.png HTTP/1.1
Host: cdn.example.com
Я хочу, чтобы Apache изменил запрос, чтобы приложение на другой стороне обратного прокси получало его в формате http://foo.example.com/images/logo.png
:
GET /images/logo.png HTTP/1.1
Host: foo.example.com
Переписать URL-адрес легко, но я не нашел способа изменить заголовок Host со значением, извлеченным из URL-адреса. Это возможно?
Да, вы можете изменять заголовки на основе URI. Хотя это уродливо - это единственный известный мне способ сделать это:
Использовать SetEnvIF
чтобы установить переменную среды, если URI соответствует тому, что вы хотите переписать.
Использовать mod_headers' RequestHeader
директива для сброса соответствующего заголовка запроса (Host:
), если эта переменная среды установлена.
Используя SetEnvIf и Header, упомянутые выше, вот что я сделал, чтобы переписать заголовок «Accept-Encoding», чтобы уменьшить количество кэшированных копий, созданных mod_cache, проверенных работоспособностью.
# rewrite variation of the Accept-Encoding header to the same one
# to reduce the caching copies
UnsetEnv compression_ok
SetEnvIfNoCase Accept-Encoding ".*gzip.*deflate.*" compression_ok=1
RequestHeader set Accept-Encoding "gzip,deflate" env=compression_ok
Что это делает: разные браузеры устанавливают Accept-Encoding немного по-разному, например «gzip, deflate» против «gzip, deflate» (с дополнительным пространством), и это заставляет mod_cache создавать разные копии содержимого. Переписав его на то же значение, mod_cache создаст только одну копию. (примечание: мой сервер заботится только о "gzip, deflate", ваш может быть другим).