Apache转发IP和端口

前提条件

先查看是否开启mod_proxy.so和mod_proxy_http.so模块,没有的话,开起来。
如果没有编译,得自己编译下,此处略过。

配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
NameVirtualHost *:83
Listen 83
<VirtualHost *:83>
ServerName baksvn
#ServerAdmin xxx@xxx.com
ProxyPass / http://10.0.103.161/
ProxyPassReverse / http://10.0.103.161/
ErrorLog logs/proxy.error.log
CustomLog logs/proxy.access.log combined

<Location /web>
DAV svn
SVNPath /data/svn/web
AuthType Basic
AuthName 'Repository Of web-160'
AuthzSVNAccessFile /data/svn/web/conf/authz
AuthUserFile /data/svn/conf/passwd
Require valid-user
Order allow,deny
Allow from 10.0.4.0/22 10.0.14.10 10.0.12.201 10.0.30.16 10.0.3.182 10.0.34.182
</Location>
</VirtualHost>

注意事项

如果需要转发的请求有做权限验证,得把这个权限验证前移到转发服务器上进行。
比如:
业务服务器:A
转发服务器:B
那么A上面的apache权限验证得移动到B上面

案例展示

将多个URI转发到其他域名/端口

应该将同一个端口的ProxyPass,写到同一个VirtualHost标签里面;不要分散成多个。

错误的写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /var/www/html
ProxyPass /gitlab http://some.domain.com/gitlab
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/html
ProxyPass /hux http://some.domain.com/hux
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/html
ProxyPass /pages http://172.20.200.191:8003/pages
</VirtualHost>

正确的写法:

1
2
3
4
5
6
7
8
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /var/www/html
ProxyPass /gitlab http://some.domain.com/gitlab
ProxyPass /hux http://some.domain.com/hux
ProxyPass /pages http://172.20.200.191:8003/pages
</VirtualHost>