Apache 反向代理 IIS 那点折腾事

最近买了阿里云, 因为在上面更灵活做自己的东西,比如自己的SVN服务器等. 另外顺便将自己用python,django  开发的网站和自己的博客移植上去. 因为原来的博客是开源的 ASP 博客, 而我又懒得转, 所以就用了阿里云windows 系统, 其实作为服务器来说, linux 更好, 但 apache 下支持 asp 的模块确实不好, 其实作为个人工作来说, windows 来说可以了。既然要同时支持 asp, python, java 等环境, 所以采用了 apache 作为反向代理服务器代理 IIS,同时 用 mod_wsgi 来支持 python,django应用.

配置apache 反向代理 IIS  
首先得在IIS 里面配置好你的网站(网上太多教程了,随便参考个就行),并且端口不能用 80, 因为 apache 用 80 作为默认端口. 配置也挺简单的.
程序代码 程序代码

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
...

<VirtualHost *:80>
       ServerAdmin summer@yihaomen.com
       ServerName www.yihaomen.com
       ProxyRequests Off
       SetEnv force-proxy-request-1.0 1
       SetEnv proxy-nokeepalive 1
  <Proxy *>
       order deny,allow
       Allow from all
  </Proxy>
       ProxyPass / http://www.yihaomen.com:8081/
       ProxyPassReverse / http://www.yihaomen.com:8081/
</VirtualHost>


上面的配置很清楚的将 www.yihaomen.com 这个域名的请求全部转发到  www.yihaomen.com:81 这个 IIS 上面去处理,得到结果后,再将结果返回客户端,性能可能稍低下,但中小网站,应该可以无视这种差距.

这样配置上去之后,运行了一段时间,发现  Apache 假死了, 查看 log 报错了:  (OS 64)指定的网络名不再可用。: winnt_accept: Asynchronous AcceptEx failed.” , 于是在网上搜索,需要配置如下东西 :
程序代码 程序代码

AcceptFilter http none
AcceptFilter https none
EnableSendfile Off  
EnableMMAP off


配置好之后,重启apache , 连续运行几天之后,没有发现问题,说明稳定下来了。

按道理说,到此为此反向代理配置成功,应该万事大吉了,可是在测试博客的过程中,发现评论文章经常会跳转到一个带端口的网页地址,也就是 IIS 绑定的端口,本来用反向代理就是像隐藏这个端口,现在这个特定的情况却出来了。经过自己排查原因, 采用如下方法解决:
1. 原来博客的文章是 生成了静态页面的, 里面的地址全部用了相对路径,可以改成绝对路径,加上域名的绝对路径。
2. 在静态页面的模板的<head> 中设置 <base href="http://www.yihaomen.com/"></base>, 然后在页面使用相对于 这个 base url的相对路径。

原来以为只有在 linux 下才是折腾,现在看来, windows 下一样需要折腾。 而且 apache 这样的东西本来就是在 linux 下运行的很好的,在 windows下需要特殊配置才好用.

后面配置 python, django, apache, mod_wsgi 可以参考前面的文章: apche mod_wsgi,django

另外所采用 apache 的版本在上面的连接中也有提到,可以参考。


除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
[本日志由 轻舞肥羊 于 2014-02-28 03:17 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: apache proxy
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.