Windows + Apache 2.2 + mod_aspdotnet + mod_jk + Tomcat + fastcgi + PHP + wincache
- 【Apache】到 http://httpd.apache.org/ 下载 Windows 安装版。本文编写时,当前稳定版为 httpd-2.2.21-win32-x86-openssl-0.9.8r.msi ,安装到 C:\Apache2.2 。
- 【mod_aspdotnet】可以到 http://sourceforge.net/projects/mod-aspdotnet/ 下载 msi 安装版本。但本文编写时, mod_aspdotnet 存在一个 bug:当设置多个 cookie 时,只能有一个 cookie 成功。经过搜索,已有解决办法:http://sourceforge.net/tracker/?func=detail&aid=1744455&group_id=175077&atid=871785 ,需要自己编译。
[下载代码] 于是,通过 svn co https://mod-aspdotnet.svn.sourceforge.net/svnroot/mod-aspdotnet mod-aspdotnet 下载源代码,按照前面说的修改办法进行修改相应代码。// WorkerRequest.h, Line 542
// virtual void SendKnownResponseHeader(int index, String* value)
if (index == HeaderContentType)ap_set_content_type(rr, poolval);
else if(index == HeaderSetCookie)
apr_table_addn(rr->headers_out, response_headers_name_c[index], poolval);
else
apr_table_setn(rr->headers_out, response_headers_name_c[index], poolval);
[编译] 按照 mod_aspdotnet2/trunk/README.txt 所讲步骤进行编译。从“Visual Studio 2005 命令提示”开始运行,设置环境变量 set APACHE22_PATH=C:\Apache2.2,然后运行 devenv mod_aspdotnet.sln /useenv /build "Release 2.2" /project mod_aspdotnet 。编译得到两个输出: Apache.Web.dll 和 mod_aspdotnet.so
[安装] 将 Apache.Web.dll 复制到 C:\Apache2.2\bin 目录下。执行 .NET 工具 gacutil.exe 将 Apache.Web.dll 注册到全局缓冲区。我使用的是 .NET 2.0,因此使用 2.0 版本中的 gacutil.exe 。将 mod_aspdotnet.so 复制到 C:\Apache2.2\modules 目录下,通过 Apache 配置文件启用。
- 【mod_aspdotnet】根据配置文档,配置 mod_aspdotnet 方式为: <IfModule aspdotnet_module>
AddHandler asp.net asax ascx ashx asmx aspx axd config cs csproj \
licx rem resources resx soap vb vbproj vsdisco webinfo
AliasMatch "^/(?i)aspnet_client/system_web/(\d+)_(\d+)_(\d+)_(\d+)/(.*)" \
"C:/Windows/Microsoft.NET/Framework/v$1.$2.$3/ASP.NETClientFiles/$4"
<Directory "C:/Windows/Microsoft.NET/Framework/v*/ASP.NETClientFiles">
Options FollowSymlinks
Order allow,deny
Allow from all
</Directory>
</IfModule>
当某一个 VirtualHost 需要使用 .NET 支持时,在 VirtualHost 或全局添加:AspNetMount / "C:/Inetpub/Inetpub" - 【mod_jk】到 http://tomcat.apache.org/connectors-doc/ 下载 mod_jk 在 windows 下的发行版,本文编写时,使用的是 mod_jk-1.2.31-httpd-2.2.3.so,复制到 C:\Apache2.2\modules 下,并在 Apache 中启用。配置与 Tomcat 之间的连接。配置方式为:
httpd.confworkers2.properties<IfModule jk_module>
JkWorkersFile conf/workers2.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
HostnameLookups Off
</IfModule>worker.list=loadbalancer,local
#-------------------
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=local
worker.loadbalancer.sticky_session=false
worker.template.host=127.0.0.1
worker.template.port=8009
worker.template.type=ajp13
worker.template.lbfactor=1
worker.template.ping_timeout=1000
worker.template.ping_mode=A
worker.template.socket_timeout=10
worker.template.connection_pool_timeout=600
worker.local.reference=worker.template
当某一个 VirtualHost 需要启用 jsp 时,可在 VirtualHost 中配置:JkMount /*.jsp local - 【fastcgi】【mod_fcgid】为了运行 PHP 脚本,采用 fasgcgi 方式。我没有选用 mod_fastcgi ,而改为选用的是 mod_fcgid,下载地址 http://httpd.apache.org/mod_fcgid/ 。 本文编写时,选用的版本是 mod_fcgid-2.3.6-win32-x86.zip 。在 Apache 中启用,配置方式为:<IfModule fcgid_module>
AddHandler fcgid-script .php
FCGIWrapper "C:/PHP5/php-cgi.exe" .php
# 10M
FcgidMaxRequestLen 10485760
</IfModule> - 【PHP】【Tomcat】安装方法不在此赘述。
- 【wincache】安装 wincache-1.0.1-5.2-nts-vc6-x86.exe 或者直接把 php_wincache.dll 复制到 C:\PHP5\ext ,并在 php.ini 中启用。