apache反向代理配置(反向代理连接的是IIS)

来源:互联网 发布:嘉兴行知小学怎么样 编辑:程序博客网 时间:2024/04/27 16:04

apache服务器的代理功能分为正向代理及反向代理:

1.正向代理:也就是我们通常所说的代理服务器,只用于代理内部网络对Internet的连接请求。客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。

2.反向代理:指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。


apache2.2以后可以通过自带的mod_proxy模块配置反向代理服务器。apache的mod_proxy模块的配置详细信息见官方文档:http://apache.jz123.cn/mod/mod_proxy.html

本例中,机器192.168.1.110是安装了apache的reverse proxy server,apache运行在8080端口,域名www.whutest.net

机器192.168.1.120是安装了IIS6的服务器,IIS运行在8080端口(因为项目原因,该服务器不能直接开放,只能通过110机器向外开放)

要实现的效果是访问www.whutest.net:8080及相当于访问192.168.1.120:8080


修改步骤:

1.修改apache的配置问价httpd.conf,加载apache的代理相关模块

LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_ftp_module modules/mod_proxy_ftp.soLoadModule proxy_http_module modules/mod_proxy_http.so

2.配置虚拟主机

<VirtualHost *:8080>#apache的监控端口ServerAdmin whupanyinghua@163.comServerName www.whutest.netProxyPreserveHost On #当启用时,此选项将把传入请求的"Host:"行传递给被代理的主机,而不是传递在ProxyPass中指定的主机名。ProxyRequests Off #反向代理为Off<Proxy *>Order deny,allowAllow from all</Proxy>ProxyPass / http://192.168.1.120:8080/ #IIS端口8080,把地址www.whutest.net:8080下所有请求都代理到192.168.1.120:8080ProxyPassReverse / http://192.168.1.120:8080/ #配置该项,隐藏具体IP地址192.168.1.120</VirtualHost>

到此,反向代理配置结束,重启apache,配置生效。访问www.whutest.net:8080即可看到服务器192.168.1.120上的内容。


在实际的配置中,原本IIS服务器上的部署的WEB项目(.NET 2.0)所在的端口是默认的80端口,在反向代理转发的时候,由于我们的系统使用了单点登录,在跳转的时候,发现反向代理的地址在跳转到登录中由www.whutest.net:8080变成了www.whutest.net,反向代理端口丢失,页面跳转失败,直接404 not found了。

在这个问题上纠结了两天,之后查看IIS上项目的代码发现有这么一段代码:string serviceUrl = Request.Url.GetLeftPart(UriPartial.Path);在日志中发现这个serviceUrl获取到的URL地址跟反向代理中的地址不太一样,假如反向代理的地址是www.whutest.net:8080,而我们IIS上真实的端口是80的话,这里的serviceUrl获取的则是www.whutest.net:80,丢失了代理的端口,获取的实际上是自己真实的端口80,这样跳转的URL能对才怪!

最后把反向代理以及IIS上的端口统一为8080之后,反向代理正常工作。

绝对是大坑啊,记录下来备用。。。不明白是配置的apache反向代理哪里出了问题或者.net 2.0 Request.Url的问题。

tips:使用apache反向代理IIS, 当IIS项目中有使用Request.Url.GetLeftPart(UriPartial.Path)进行URL跳转之类逻辑时,请确保apache反向代理的端口与IIS真实端口保持相同。





0 0