Linux上Apache反向代理之ProxyPass IIS网站总结

Linux上Apache反向代理之ProxyPass IIS网站总结 收藏
   在把这篇总结写下来之前,我想说几句话: 工作和爱好千万别混在一起,心焦力瘁啊!为了完成一个看似以前很简单并且也有过成功经验的任务,我干到现在。本来以为挺简单的事情,加上那不争气的Promise MB Fasttrak133 的RAID驱动真的让我领略到了Windows服务器平台的魅力:一个字:真TMD烂!服务器安装的时候就有着各种困难,好容易弄好了,却在配置中出现了麻烦,当然不是指简单的对系统和网站的配置,而是针对它的转发配置。

  说正题!

  结构如此:


 

 资料:

  1、Linux1 为主服务器,Win1为本次配置的服务器,Linux2、Linux3为本次顺手配置的服务器;
  2、两个Domain: www.a.com、www.b.cn;
  3、防火墙为默认配置;地址:192.168.100.1
  4、外网IP地址:222.222.222.222,内网资源分配:Linux1 : 192.168.100.2、Linux2: 192.168.100.3、Linux3: 192.168.100.4、Win1: 192.168.100.5;
  5、之前所有Domain解析完毕,至222.222.222.222;

  本次重点是www.b.cn 这个Domain在WIN服务器中,使其能够在单一外网IP下通过Linux1的Apache反向代理转发。

  按照道理说,以我以前做的httpd的Proxy或者是Rewrite都是没有问题的,比如:



<VirtualHost 192.168.1.6:80>
ServerAdmin mail@fatsohome
ServerName mail.fatso.cn
ErrorLog logs/mail-error_log
CustomLog logs/mail-access_log common
rewriteengine on
proxyrequests   off
usecanonicalname off
rewriterule ^/(.*)$ http://192.168.1.2/$1 [P,L]
</VirtualHost>  

具体内容请参考我以前的文章:http://fatso.blog.hexun.com/2290770_d.html


  但是这一次却出现了问题,打电话问师兄,师兄帮我分析了很多情况以后也没能解决,关键是我们以前都是只选择使用Linux服务器,基本用不着Win平台的服务器,所以这一次显然要搞出问题所在。

  在测试和分析中,师兄所讲的使用下面的方式做反向是没问题的:



<VirtualHost>
ServerName  www.b.cn
RewriteEngine On
ProxyPass / http://www.b.cn/
...
</virtualHost>


  但是后来我发现,我们都忽略了一点:我们都处在自己的内网,无论是服务器还是Client都是会先被服务器返回内网的地址运行!这就让我们走入了误区,呵呵。

  当中反复测试了下面的方式,基本上包括了Proxy方式和Rewrite方式:



RewriteRule ^/$ http://192.168.100.5/index.asp

RewriteRule ^/(.*) http://192.168.100.5/ [P,L]

RewriteRule ^/(.*) http://www.b.cn/ [P,L]


  上面这些都自动专到了Linux1的主Domain: www.a.com,于是改用Proxy形式:


ProxyPass /${request_uri} http://192.168.100.5/${request_uri}
ProxyPass ^/$ http://192.168.100.5/index.asp


  但是失败告终,页面显示的是403受限访问信息,在无奈之下察看了这个虚拟主机的错误信息,也就是下面这行所表示的内容:


ErrorLog logs/site_b-error_log
CustomLog logs/site_b-access_log common


  发现在Error_log纪录中显示如此内容:



Sat Apr 26   11:08:42 2008   error client 221.1.13.192 client denied by server configuration: proxy:http://192.168.100.5/


  这是Proxy设置的问题,可Proxy的设置并没有错误:


<IfModule mod_proxy.c>
ProxyRequests Off

<Proxy *>
     Order deny,allow
     Deny from all
     Allow from .example.com
</Proxy>
</IfModule>


  失望之余突然发现了 Allow From这条规则没有进行过改动……,失败!! 于是更改这条规则:



...
Allow from 192.168.100
...


  再次试验,成功访问,可是却出现了部分内容无法显示,看来Proxy在虚拟主机部分的设置还是有问题的,更改:



ProxyPass / http://www.sdzxlz.cn/
ProxyPassReverse / http://www.sdzxlz.cn/


  重新启动Apache,成功~~~ :D 但是如此设置Proxy就会成为全局透明代理了,显然并不符合我们的需要,所以在虚拟主机设置中单独增加了设置条目,详细内容为:



<proxy>
     Order deny,allow
     Allow from 192.168.100
</proxy>

  最后顺手设置了其他两台Linux服务器,并按照此设置类进行,也都成功运行。

  现在给出在这次设置中,改动的文件:


/etc/hosts
增加 www.b.cn 的本地设置:

192.168.100.5   www.b.cn
192.168.100.5   b.cn




httpd.conf

启动模块:
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so

更改Proxy 设置,如上代码显示;
增加虚拟主机设置:

<VirtualHost 192.168.100.5:80>
ServerAlias b.cn
ServerAdmin mail@fatsohome
ServerName www.b.cn
ErrorLog logs/site_b-error_log
CustomLog logs/site_b-access_log common
RewriteEngine On

<proxy>
     Order deny,allow
     Allow from all
</proxy>

ProxyPass / http://www.b.cn/
ProxyPassReverse / http://www.b.cn/
</VirtualHost>


  参考文献:

  1. Apache 2.0中文手册 http://man.ddvip.com/soft/apache2.0/
  2. Google www.g.cn
  3. 我原来的技术Blog: http://fatso.blog.hexun.com/
  4. 师兄的Blog: http://pangty.ta139.com/pangty/
  5. 猪侠山庄Blog: http://www.linuxpk.com/37468/viewspace-11125.html
  6. NetSeek's Blog : http://www.linuxpk.com/391/viewspace-4017.html



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shaobingj126/archive/2010/05/07/5567698.aspx

http://www.idouye.com 爱豆叶资料分享

猜你喜欢

转载自sealbird.iteye.com/blog/741077
今日推荐