Mar 7

[原]用Apache搭建代理服务器 雨

linuxing , 15:52 , 网络服务 » 常见服务 , 评论(1) , 引用(0) , 阅读(43659) , Via 本站原创 | |
   几天前出差,在某酒店上网,发现除80外,所有的端口都给屏蔽了。这可麻烦了,很多事情都做不了,后来,只能先从网上找了一个临时代理,然后通过VPN绕过网关,速度慢些,但起码可用吧。回来就马上搭建一个本地的代理服务器,为减轻服务器的负载,不想再多开端口,先试试Apache吧。
   我要实现的功能很简单,就是一个正向代理,并可允许通过VPN链接即可:
一、平台
操作系统:红旗DC Server 5.0 SP2
应用平台:Apache 2.0
引用
# rpm -qa|grep httpd
httpd-2.0.52-28.ent.redflag
httpd-suexec-2.0.52-28.ent.redflag

二、配置
修改/etc/httpd/conf/httpd.conf文件,去掉原来的"#"号,或直接增加:
引用
<IfModule mod_proxy.c>
ProxyRequests On
<Proxy 192.168.228.1:80>
   Order deny,allow
   Deny from 192.168.1.*
   Allow from all
</Proxy>
<IfModule mod_disk_cache.c>
  CacheEnable disk /
  CacheRoot "/var/cache/mod_proxy"
</IfModule>
</IfModule>

AllowCONNECT 1194

可以看到,配置非常简单,而且不会影响原来的Vhost设置。需要注意的地方是,若要该代理转发非80端口的数据,必须在Global配置下,增加AllowCONNECT配置,并指定允许的端口,例如OpenVPN默认的1194
三、反向代理
反向代理,通常就是把一个内网Web服务器通过代理公布到外部,对于Apache来说,可以理解为映射。我没有使用这个配置,只作为说明:
引用
ProxyRequests Off
#反向代理,是不需要打开ProxyRequests的
<Proxy ip:80>
Order deny allow
Allow from all
</Proxy>

然后在<virtualhost>配置段下增加:
引用
ProxyPass /mirror http://www.baidu.com/
ProxyPassReverse /mirror http://www.baidu.com/

这样,当访问virtualhost配置的虚拟主机下的mirror目录,即可自动从百度读取。当然,把百度的地址改为内网地址,就可发布内网网站咯。
※补充说明:
举例:我对外只有一台web服务器,但我内网还有一台web服务器提供另外的服务。现在我想把这台服务器也发布到外网上,该如何设置呢?
回复:因为IP只有一个,80端口已经给占用了,所以,应该设置如下的反向代理即可:
首先,建立一个空目录:
mkdir /var/www/html/mail
chown apache.apache /var/www/html/mail

然后,修改配置文件,增加:
引用
<VirtualHost *:80>
   ServerAdmin linuxing@mail.linuxfly.org
   DocumentRoot /var/www/html/mail/
   ServerName mail.linuxfly.org
   ErrorLog logs/mail.linuxfly.org_log
   CustomLog logs/mail.linuxfly.org_log common
   ProxyPass / http://192.168.228.110/
   ProxyPassReverse / http://192.168.228.110/
</VirtualHost>

重启Apache服务器即可。以后访问http://mail.linuxfly.org,即会自动转到内网的192.168.228.110的web服务上。
四、用户认证
本来,我是想给正向代理配置一个用户认证的,但就是不成功,似乎Apache只能做到基于目录的认证,请有经验的朋友指教?
以下是《Apache经典实例》中的配置,是基于Apache 1.0的。
先用htpasswd生成用户名和密码文件:
htpasswd -c /etc/httpd/conf/password guest

然后会提示输入两次密码。
修改密码是:
htpasswd -m /etc/httpd/conf/password guest

新增加用户是:
htpasswd /etc/httpd/conf/password guest2

接下来是配置
引用
ProxyPass "/secretserver/" "http://127.0.0.1:8080"
<Directory "proxy:http://127.0.0.1:8080/">
   AuthName SecretServer
   AuthType Basic
   AuthUserFile /etc/httpd/conf/password
   Require valid-user
</Directory>

上述截选自英文版O'Reilly -《 Apache Cookbook》- 2003的Recipe 10.8 Requiring Authentication for a Proxied Server
※Apache 2.2中关于mod_proxy模块的中文说明:点击
Tags: ,
小白哦 Email
2012/01/08 11:59
关于用户认证那块儿,apache手册里面确实是说AuthType只能用于Directory或者.htaccess。"proxy:..."这样的路径不能算是一个directory吧?不过我试过Location是可以的。你可以在Proxy下面添加一个Location然后就可以指定认证了。
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]