环境:Ubuntu 6.10 edgy, Apache 2.55
正常启用的方法很简单,首先要启用apache的proxy模块:
a2enmod proxy
然后在apache的conf中进行相应配置即可,比如我把/ubuntu
反向代理到内网的另外一台主机,对公网进行服务:
<Location /ubuntu>
ProxyPass http://svr5/ubuntu
ProxyPassReverse http://svr5/ubuntu
</Location>
这样当公网用户访问我的主机的/ubuntu
子目录时(注意/ubuntu
这个Alias无需定义),Apache就会从访问内网服务器svr5的相应内容,并返回给用户。
以上是正常定义方式,不过在ubuntu下调用时却出现403错误,查看apache的error.log发现:
[Sun Apr 01 19:35:57 2007] [error] [client 121.*.*.*] client denied by server configuration: proxy:http://svr5/ubuntu/
查看svr5的log没有访问记录,就是本服务器的配置中的问题,再查看/etc/apache/mods-avaliable/proxy.conf,发现如下内容:
<IfModule mod_proxy.c>
#turning ProxyRequests on and allowing proxying from all may allow
#spammers to use your proxy to send email.
ProxyRequests Off
<Proxy *>
Order deny,allow
Deny from all
#Allow from .your_domain.com
</Proxy>
为了避免spammer使用服务器发送垃圾邮件,proxy模块启用后默认是关闭所有访问的,真想不通反向代理怎么就能够发送垃圾邮件了,不过找到问题之后,解决方法就有了,就是修改这个/etc/apache/mods-avaliable/proxy.conf文件,把#Allow from .your_domain.com
修改为Allow from 用户地址
,虽然可以用211.24
来代表一定ip范围的用户,还是麻烦,干脆Allow from all
也是可以的。如果觉得修改这个文件麻烦,也可以在httpd.conf中写上类似代码:
<proxy>
Order deny,allow
Allow from all
</proxy>
参考:
- [Apache2 ProxyPass experiences](http://ubuntuforums.org/showthread.php?t=39328)
- [Apache’s ProxyPass on Ubuntu](http://serbiancafe.wordpress.com/2006/10/20/apaches-proxypass-on-ubuntu/)