Haproxy

使用 HAProxy 修改特定 URL 的 http 標頭

  • August 17, 2018

對於特定的 URL,我想為靜態資產設置記憶體控制標頭,例如/images/*,/js/*等,告訴瀏覽器使用本地記憶體 30 天而不是獲取新版本。如何通過 haproxy 配置完成此操作?

在這被誤解之前,這不是如何在 HAProxy 中記憶體內容的重複。我只希望 haproxy 將標頭附加到某些資產的請求中,告訴瀏覽器使用本地記憶體版本(如果可用),但僅限於 1 個特定域。

您可能可以在一行中完成此操作,但更清楚的是:

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

引用自:https://serverfault.com/questions/925289