Apache的反向代理功能虽然没有Nginx强大,但也是Apache提供的功能之一,当你的服务器因过多的历史包袱而不能切换到Nginx或因技术原因而不能熟练使用Nginx时,它也许会派上大用场。
配置中涉及到的主要指令:
ProxyPass 代理
ProxyPassMatch 区别于ProxyPass就只是匹配方式是通过regex,其他类似
ProxyRequests 正向代理开关
ProxyPassReverse 反向代理,修改返回的http header信息
ProxyPreserveHost 反向代理,是否修改请求的header信息
ProxyPassReverseCookieDomain 修改Cookie的域信息
ProxyPassReverseCookiePath 修改Cookie的路径信息
假定我们要把对/foo和/bar的请求定向到后端的http://localhost:8080/foo和http://localhost:8080/bar,配置文件如下:
ProxyPass /foo/ http://localhost:8080/foo/
ProxyPassReverse /foo/ http://localhost:8080/foo/
ProxyPassReverseCookieDomain http://localhost:8080 http://www.somesite.com
ProxyPassReverseCookiePath / /foo/
ProxyPass /bar/ http://localhost:8080/foo/
ProxyPassReverse /bar/ http://localhost:8080/bar/
ProxyPassReverseCookieDomain http://localhost:8080 http://www.somesite.com
ProxyPassReverseCookiePath / /bar/
如果使用ProxyPassMatch,则为
ProxyPassMatch ^/(foo|bar)/.*$ http://localhost:8080
而按照Apache的官方文档配置为:
ProxyPassMatch ^/(foo|bar)/(.*)$ http://localhost:8080/$1/$2
则是错误的,这算是Apache文档的一个坑吧。