Mod-Rewrite
Apache 可以根據 URL 重寫請求的 Host 標頭嗎?
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 很容易,但我還沒有找到一種方法來使用從 URL 中提取的值來修改 Host 標頭。這可能嗎?
是的,您可以根據 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”,你的可能不同)。