搜索文件名:httpd.conf,打开后进行如下配置:
流程
- 打开proxy的相关modules:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule proxy_http_module modules/mod_proxy_http.so
- 在最下面,补充proxy配置:
# 服务器名,例如 172.10.10.100
ServerName 172.10.10.100
# 作URL前缀匹配
ProxyPass /Home/Index/!
# Apache调整HTTP重定向应答中的Location
ProxyPassReverse /Home/Index/!
# 反向代理正则匹配
ProxyPassMatch ^/test(.*)$ http://172.10.10.100/test/$1
字段说明
ProxyPass
语法:ProxyPass [路径] ! | url
- ProxyPass
路径
!
不转发含路径
的请求。 - ProxyPass 路径 url
仅替换从开始到路径(包含路径) 为 url
🌰
ProxyPass match/path http://47.100.1.100
假设请求:
http://172.100.1.100/match/path/route
此时,内部会转为:
http://47.100.1.100/route
主要是用作URL前缀匹配,不能有正则表达式,它里面配置的Path实际上是一个虚拟的路径,在反向代理到后端的url后,path是不会带过去的
ProxyPassReverse
语法:ProxyPassReverse [路径] url
一般和ProxyPass指令配合使用,此指令使Apache调整HTTP重定向应答中Location, Content-Location, URI头里的URL,这样可以避免在Apache作为反向代理使用时后端服务器的HTTP重定向造成的绕过反向代理的问题
如果没有加这样的反向代理设置的情况下,访问http://www.test.com/example/a,如果www.example.com对请求进行了redirect至http://www.example.com/b,那么,客户端就会绕过反向代理,进而访问http://www.test.com/example/b。如果设置了反向代理,则会在转交HTTP重定向应答到客户端之前调整它为http://www.test.com/example/a/b,即是在原请求之后追加上了redirect的路径。
ProxyPassMatch
语法:ProxyPassMatch [regex] ! | url
-
ProxyPassMatch regex !
不转发符合regex
的请求。 -
ProxyPassMatch 正则regex url
ProxyPassMatch ^/test(.*)$ http://172.10.10.100/test/$1
符合正则
^/test(.*)$
都使用http://172.10.10.100/test/
http://47.10.10.100/test/route
原请求路径会变为http://172.10.10.100/test/route
url是正则匹配,而不是简单的前缀匹配