Изменить заголовки http для конкретных URL с помощью HAProxy

Для конкретного URL-адреса я бы хотел установить заголовки контроля кэша для статических ресурсов, таких как /images/*, /js/*и т. д., который говорит браузеру использовать локальный кеш, скажем, 30 дней вместо загрузки новой версии. Как я могу сделать это через конфигурацию haproxy?

До того, как это будет неправильно понято, это не дубликат того, как кэшировать содержимое в HAProxy. Я просто хотел бы, чтобы haproxy добавлял заголовки к запросам для определенных ресурсов, сообщая браузеру использовать локальную кэшированную версию, если она доступна, но только для 1 конкретного домена.

2 ответа

Решение

Вероятно, вы могли бы выполнить это в одной строке, но это более понятно, как это:

frontend myfrontend
    bind 0.0.0.0:80
    default_backend default
    acl cache_me path_dir /js
    acl cache_me path_dir /images
    use_backend cache if cache_me

backend default
    server server1 1.2.3.4:80

backend cache
    http-request set-header cache-control max-age="2592000"
    server server1 1.2.3.4:80

Объяснение:

acl Ключевое слово сообщает haproxy, что оно должно добавить запрос к определенному acl, если условие выполнено.

path_dir соответствует подкаталогу, тогда как path будет соответствовать всему пути. Может быть path_sub лучше здесь, он ищет подстроку в пути.

use_backend направляет запросы к определенному бэкэнду, если запрос находится в ACL. Все остальное идет в бэкэнд по умолчанию.

Таким образом, вы можете легко добавить дополнительные пути позже или даже направить эти запросы на другие серверы позже, если хотите.

Кроме того, фильтрация по домену:

frontend myfrontend
    bind 0.0.0.0:80
    default_backend default
    acl cache_me path_dir /js
    acl cache_me path_dir /images
    acl domain1 hdr(host) -m sub example.com
    use_backend cache if cache_me and domain1

backend default
    server server1 1.2.3.4:80

backend cache
    http-request set-header cache-control max-age="2592000"
    server server1 1.2.3.4:80
frontend main
   http-request set-var(txn.path) path

backend local
   http-response set-header X-Robots-Tag noindex if { var(txn.path) -m end .pdf .doc }
Другие вопросы по тегам