Java堂  


Apache+Resin发布程序时一直出现403错误的解决办法

Filed under: Web&Server — Jet @ 11:28 下午
原文出处: Apache+Resin发布程序时一直出现403错误的解决办法
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

今天在Linux下面把Apach和Resin整合之后,程序发布的时候总是出现403错误。首先检查了一下Apache和Resin的配置文件,新建一个webapp显示解析成功,这样证明二者整合是正确的;另外还有一个现象,就是同样的程序在Windows下也是使用Apache和Resin进行整合的,但是运行正常,这样就排除了程序自身的问题。

因为页面总是显示403错误,又想到Windows和Linux下面最大的区别就是对文件权限的设置,于是使用 ls -l 命令查看了目录的权限,果然发现目录的权限只是 drwx——,应该设置为 drwxr-xr-x,于是使用

  1. chmod -R 755 directory

其中-R参数用于使设定的权限用于该目录及子目录下所有文件和目录。

另外再复习一下权限的基础知识:

“rwx”表示 4(r)+2(w)+1(x)=7
“rw-”表示 {4(r)+2(w)+0(-)=6

参考资料:
linux修改文件夹-文件目录权限

Apache2.x中设置gzip

Filed under: Web&Server — Jet @ 1:28 下午
Tags: ,
原文出处: Apache2.x中设置gzip
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

在Apache2.x中使用mod_deflate进行gzip压缩,配置信息如下:

  1. LoadModule deflate_module modules/mod_deflate.so
  2. LoadModule headers_module modules/mod_headers.so
  3.  
  4. # gzip 设置
  5. # Only compress specified content type
  6. # see also http://www.devside.net/guides/config/compression
  7. <IfModule mod_deflate.c>
  8.     # The value must between 1 (less compression) and 9 (more compression)
  9.     DeflateCompressionLevel 7
  10.     # compress content with type html, text, and css
  11.     AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php application/json
  12.     # place filter 'DEFLATE' on all outgoing content
  13.     SetOutputFilter DEFLATE
  14.     # Properly handle old browsers that do not support compression
  15.     BrowserMatch ^Mozilla/4 gzip-only-text/html
  16.     BrowserMatch ^Mozilla/4\.0[678] no-gzip
  17.     BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  18. </IfModule>

参考资料:
apache 2.2.15中配置mod_deflate
httpd.conf — compression

Resin中对日志输出的配置

Filed under: JavaPlateform,Web&Server — Jet @ 2:17 下午
Tags:
原文出处: Resin中对日志输出的配置
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

Resin中对日志的设置主要有如下参数:log、logger、access-log、stdout-log和stderr-log。前两个放在<resin>标签,也就是主标签下面,其中log主要用于配置JDK logging API,logger用于指定需要log的包及level,跟log4j中的用法相似,只不过resin中level有个特殊的选项就是off,用于关闭日志输出;而后面三个*-log放在<host>或<host-default>下面,access用于HTTP输出,stdout用于标准输出(System.out),stderr用于错误输出(System.err,对应log4j中的log.error)。

三个*-log中间的属性是相同的,所以我们集中来说明一下:

  • path: 用于设定日志文件的路径,非常有意思的是它支持所谓的El Variables and Functions,也就是resin中的变量,比如${host.name}就是虚拟站点的id名称,所以如果将它放在<host-default>下面的话,将path设置为 logs/${host.name}/access.log的话可以将不同站点的日志存放在不同的目录下面。
  • archive-format: 这个参数可以设置日志归档的格式,如设置为access-%Y%m%d.log可以在归档的时候自动按日期进行归档命名。另外还有一个特性需要说明的是,resin竟然支持自动压缩log文件,而且设置的方法非常简单,只要后缀名是gz就可以了,如access-%Y%m%d.log.gz,这样归档的时候会自动压缩,而且支持windows和linux系统。
  • format: 用于设置每条日志输出的格式,这个非常简单,而且通常使用系统内置的格式就可以了。
  • rollover-size: 用来设置归档日志文件的最小尺寸,单位可以设置成kb、mb等等,默认为1mb。
  • rollover-period: 用来设置归档日志文件的周期,单位可以是1D(一天)、1W(一周)、1M(一个月)等。
  • 最后给出一个范例供大家参考:

    1. <!--
    2.    - Resin 3.1 configuration file.
    3.   -->
    4. <resin xmlns="http://caucho.com/ns/resin"
    5.        xmlns:resin="http://caucho.com/ns/resin/core">
    6.   <!--
    7.      - Logging configuration for the JDK logging API.
    8.     -->
    9.   <log name="" level="off" path="stdout:"
    10.        timestamp="[%H:%M:%S.%s] {%{thread}} "/>
    11.  
    12.   <!--
    13.      - 'info' for production
    14.      - 'fine' or 'finer' for development and troubleshooting
    15.     -->
    16.   <logger name="com.caucho" level="info"/>
    17.  
    18.   <logger name="com.caucho.java" level="config"/>
    19.   <logger name="com.caucho.loader" level="config"/>
    20.  
    21.     <host-default>
    22.       <!--
    23.          - With another web server, like Apache, this can be commented out
    24.          - because the web server will log this information.
    25.         -->
    26.       <access-log path="logs/${host.name}/access.log" 
    27.             archive-format="access-%Y%m%d.log.gz"
    28.             format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'
    29.             rollover-size="10mb"
    30.             rollover-period="1D"/>
    31.       <!--
    32.          - stdout log and stderr log
    33.         -->
    34.       <stdout-log path="logs/${host.name}/stdout.log" 
    35.             archive-format="stdout-%Y%m%d.log.gz"
    36.             timestamp="[%Y.%m.%d %H:%M:%S.%s]" 
    37.             rollover-size="10mb"
    38.             rollover-period="1D"/>
    39.       <stderr-log path="logs/${host.name}/stderr.log" 
    40.             archive-format="stderr-%Y%m%d.log.gz"
    41.             timestamp="[%Y.%m.%d %H:%M:%S.%s]" 
    42.             rollover-size="10mb"
    43.             rollover-period="1D"/>
    44.     </host-default>
    45. </resin>

    最后还有一个事情需要说明一下,如果在windows系统下将resin注册成服务程序之后就会在log目录下产生jvm-defautl.log文件,而且这个文件会一直累加,所以会变的文件非常大而影响resin的性能。原来在Apache和Resin产生大容量日志的解决办法这篇文件中提到的使用httpd -jvm-log NUL的方法在3.1中无法使用,而且查找了大量的文档也没有找到合适的方法,后来索性将log目录中的写入权限去掉了,重启resin也没有任何影响,算是解决了这个问题。

    参考资料:

    http://caucho.com/resin-3.1/doc/config-log.xtp

    http://caucho.com/resin-3.1/doc/el-var.xtp#host

    Apache和Resin组合时间歇性出现503错误的解决方法

    Filed under: JavaPlateform,Web&Server — Jet @ 5:12 下午
    Tags: ,
    原文出处: Apache和Resin组合时间歇性出现503错误的解决方法
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    使用Apache和Resin进行组合时,如果Resin关闭或中断的时会出现如下的HTTP 503错误:

    Service Temporarily Unavailable
    The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

    造成这个错误的原因是因为Resin无法启动,可以单独访问resin(如8080端口)查看具体的错误。

    我这里要说的是,在Resin和Apache都非常非常正常的情况下,间歇性的出现上述错误,也就是说不是一直有,而是偶尔出现这个错误,刷新下页面就好了。这个问题非常郁闷,后来在resin的bug报告中(见参考资料)竟然发现了解决的办法:

    The important configuration are load-balance-socket-timeout, socket-timeout, load-balance-idle-time and keepalive-timeout. The two load-balance-* configure mod_caucho. socket-timeout and keepalive-timeout configure the Resin side.

    load-balance-socket-timeout needs to be large enough to handle any server-side processing delays before the first data.

    socket-timeout and keepalive-timeout need to be larger than load-balance-idle-time because they need to keep the connection open for a keepalive request.

    For a diagram, see

    http://caucho.com/resin/admin/load-balancing.xtp

    也就是说,Resin在同Apache进行组合通讯的时候主要依靠四个参数:load-balance-socket-timeout, socket-timeout, load-balance-idle-time 和 keepalive-timeout,其中两个load-balance-*参数用来设置mod_caucho(就是与Apache组合的so文件),socket-timeout和keepalive-timeout用来设置Resin。至于参数数值的大小顺序依此是:load-balance-socket-timeout > socket-timeout 和 keepalive-timeout > load-balance-idle-time。上述四个参数的官方说明地址为:http://caucho.com/resin-3.1/doc/server-tags.xtp

    那为什么会间歇性出现503错误呢?这个是因为resin默认的socket-timeout为65s,时间太短了,有些比较大的请求在这个时间之内还没有进行完。综合上面所说,参考的配置如下:

    1. <resin ...>
    2.     <cluster id="app-tier">
    3.         <server-default>
    4.             <socket-timeout>180s</socket-timeout>
    5.             <keepalive-max>3000</keepalive-max>
    6.             <keepalive-timeout>180s</keepalive-timeout>
    7.             <load-balance-idle-time>120s</load-balance-idle-time>
    8.         </server-default>
    9.     </cluster>
    10. </resin>

    从此,这个世界清净了。

    参考资料:
    Apache 2.2.x + Resin 3.1.x: frequent 503 status error messages (Service Temporarily Unavailable)
    0002862: Apache + Resin and 503 HTTP Error
    resin apache问题

    Apache和Resin组合时UrlRewriteFilter失效的解决方法

    Filed under: Tools,Web&Server — Jet @ 5:36 下午
    Tags: ,
    原文出处: Apache和Resin组合时UrlRewriteFilter失效的解决方法
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    目前在Spring3.0的官方example中都使用UrlRewriteFilter来做伪静态,单独运行在Resin等JavaEE Web容器中的时候一切都OK,但是一旦与Apache一起组合的时候总是会出现404或403错误,当然UrlRewriteFilter所设定的规则也无效。

    造成这种现象的原因是因为在默认情况下,静态的资源均由Apache进行处理,而jsp或者由web.xml所映射的servlet均交给resin进行处理。如果web项目没有使用UrlRewriteFilter则一切OK,但是使用了UrlRewriteFilter之后,由servlet所映射的地址并不是/*即所有资源了,而是类似/app/*这样的设置。也就是说,用户所请求的资源首先由Apache判断一下,然后再由选择的交给Resin,最后才执行UrlRewriteFilter的规则。

    知道了原因,解决的方法也就出来了,只要告诉Apache将所有的资源都交由Resin来处理就可以了,可以使用Resin的servlet-mapping方法进行配置,配置如下:

    1. <servlet-mapping url-pattern='/*' servlet-name='plugin_match'/>

    其中plugin_match是Resin内置的servlet,按照resin官方的解释就是Resin告诉Apache将所有的符合url-pattern规则要求的请求都发送给它进行处理。

    因为servlet-mapping是resin特有的,所以建议将此也放在resin-web.xml中,然后放在项目中的WEB-INF目录下:

    1. <web-app xmlns="http://caucho.com/ns/resin"
    2.          xmlns:resin="http://caucho.com/ns/resin/core">
    3.     <servlet-mapping url-pattern='/*' servlet-name='plugin_match'/>
    4. </web-app>

    参考资料:
    Apache的UrlRewrite和Resin的配置问题
    Resin官方对servlet-mapping的说明

    解决Firefox及Firebug内存泄漏的问题

    Filed under: Tools,Web&Server — Jet @ 10:09 上午
    原文出处: 解决Firefox及Firebug内存泄漏的问题
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    Firebug现在基本是调试Javascript脚本必备的工具,但是由于Firefox运行机制的原因,通常在使用一段时间之后会发现Firefox变得非常慢,在任务管理器中也会发现firefox.exe进程占用了不小的内容。

    这里综合自己使用的情况强烈推荐三种方式,可以根据自己的喜好进行选择:

    1. 进行系统设置
    在地址栏中使用about:config打开FF的配置页面,右键添加一个属性:名称为config.trim_on_minimize,值类型为boolean,值为true,然后将FF关闭之后再打开,这样该设置就生效了。该属性的作用是当Firefox最小化之后会自动释放内容,可以打开任务管理器进行验证。该方法操作和设置都最简单。

    2. 使用RAMBack扩展
    FF中有一个非常不错的自动释放内存的扩展:RAMBack,这个扩展的基本原理也是上述第一条中的方法,只不过使用插件的方式将这个动作进行自动操作了,安装好扩展并重启FF就可以了,操作更方便。

    这里顺便在推荐一个不错的扩展:StatusbarEx,该扩展是用来监视FF内存使用情况的,另外还可以监视系统内存的使用情况、CPU的使用率、FF CPU的使用率等等。

    3. 使用SweepRAM软件
    确切地来说,SweepRAM并非专门用来释放FF内存的,而是释放系统中所有未被使用但驻留在内存中的数据,据我的使用来看,他对javaw的释放效果也很明显,如果使用Eclipse或NetBeans等做开发的朋友可以试一试。

    这个软件是使用VB开发的,所以通常需要在上面的网站上下载vb6fr.dll,然后拷贝到 %SystemRoot%\system32 目录下,另外默认执行SweepRAM.exe完成后会出现一个done的对话框,可以在后面加上 /s 参数禁止显示该对话框。我是在快速启动栏里面创建了一个快捷方式,使用的时候直接点一下,非常方便。

    参考资料:
    SweepRAM – Firefox3 内存释放工具

    彻底修改Google Chrome浏览器的安装目录

    Filed under: Tools,Web&Server — Jet @ 5:42 下午
    原文出处: 彻底修改Google Chrome浏览器的安装目录
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    谷歌浏览器以其简洁的界面和快速的Javascript解析速度v8引擎,很快在浏览器市场中占有了一席之地,我们公司的绝大多数系统就建议用户选择使用谷歌浏览器。但是说起他的安装绝对是个杯具:一是默认下载的是在线安装版的;另外一个就是默认的安装目录在系统盘,而且不能选择!! 本文就针对这两点分别给出一个解决方案。

    一、下载谷歌的离线安装包
    谷歌浏览器的默认下载地址是:http://www.google.com/chrome/eula.html,其实这个地址后面可以跟很多的参数,最关键的一个参数就是standalone,将它的值设置为1就可以下载离线版了,具体的地址是:http://www.google.com/chrome/eula.html?hl=en&standalone=1,里面的hl是设定语言的,可以不用。

    二、修改谷歌浏览器的安装目录
    因为谷歌浏览器的安装程序很难进行定制,所以我们没有办法直接修改安装程序来实现修改安装目录的目的,但是可以通过一个小的技巧来制作绿色版的谷歌浏览器

    首先使用上面的方法下载离线版的谷歌浏览器,然后默认安装,安装完之后最好不要允许浏览器。谷歌浏览器的默认安装目录如下:

    Win7:
    C:\Users\系统用户名\AppData\Local\Google\Chrome\Application
    WinXP :
    C:\Documents and Settings\系统用户名\Local Settings\Application Data\Google\Chrome

    进入上述目录之后,首先将chrome.exe放到包含版本号的目录中,然后将这个目录拷贝到你所想要放的地方,最后修改这个目录名就可以了,比如可以修改成GoogleChrome。

    还有最后一步,就是设置UserData。可以在刚才那个GoogleChrome目录下面创建一个新的目录UserData,然后创建chrome.exe的一个快捷方式,在快捷“目标”后面加上下面的参数:

    –user-data-dir=UserData

    然后启动的时候直接运行这个快捷方式就可以了。

    最后卸载刚才安装在系统盘下的Google浏览器就可以了。

    注意几点:
    1. 如果不将chrome拷贝到版本号的目录下,直接运行chrome.exe则无效;
    2. 如果不在添加了–user-data-dir参数的快捷方式下运行程序,则默认情况下的User Data目录还是在系统盘下面。

    参考资料:
    简单制作自己的Google Chrome (谷歌浏览器)绿化版
    修改chrome的安装目录

    IE6下使png透明的完美解决方式

    Filed under: RIA,Web&Server — Jet @ 7:46 下午
    原文出处: IE6下使png透明的完美解决方式
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    众所周知,在IE6下面无法使用png透明的效果,虽然IE6的市场份额逐渐下滑,但是在国内依然保持最旺盛的占有率,这一点无法进行忽视。下午的时候Google了一下目前的解决方案,发现IE PNG Fix 2.0 Alpha 4虽然使用非常比较方便而且可以打到预期的效果,但是在加载页面的时候非常的缓慢,这一点是无法容忍的。还有使用滤镜的,但是效果一般,而且没有通用性。

    最后在蓝色理想的一个帖子里面有网友提到使用Unit PNG Fix,结果用下来发现效果和速度都非常令人满意,调用方法我简单的说一下吧:

    首先在http://labs.unitinteractive.com/unitpngfix.php页面的下面下载unitpngfix.zip文件

    接下来将压缩包里面的两个文件:unitpngfix.js和clear.gif拷贝到站点的某个位置,假设将unitpngfix.js拷贝到scripts目录,clear.gif放到images目录,这个时候需要特别注意的是,必须修改unitpngfix.js文件中clear变量的值,也就是clear.gif相对于unitpngfix.js文件的路径,上面的情况就要修改成:

    1. var clear="../images/clear.gif"; //path to clear.gif

    最后在页面中进行调用unitpngfix.js文件就可以了。

    1. <!--[if lt IE 7]>
    2. <script type="text/javascript" src="scripts/unitpngfix.js"></script>
    3. <![endif]-->

    到这里其实已经看到效果了,不过默认情况下unitpngfix会对页面中所有的元素进行渲染处理,这样的话未免有些影响页面加载的效率,有一种方法就是可以将所要渲染的元素后面使用名为unitPng的style进行限定。

    延伸阅读:IE6下使png透明的完美解决方式(续)

    OK,Enjoy It!

    参考资料:
    老问题重提:IE6下png背景透明
    ie6处理png透明图片问题
    ie6 png透明解决方法简单高效

    Apache下FastCGI模块的众多版本

    Filed under: OS,Web&Server — Jet @ 8:36 上午
    Tags: ,
    原文出处: Apache下FastCGI模块的众多版本
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    这两天在Apache上配置以FastCGI方式来加载PHP和Perl,连续花了三天的时间才正式配置好并且稳定了,配置的话到不是很麻烦,关键是配置好之后还要稳定。后续我会将整个过程记录下来给大家分享,今天我要先说的是FastCGI的版本问题。

    目前我们在网上能够找到的FastCGI有三个版本:
    (1) mod_fastcgi:官方地址是http://www.fastcgi.com/。这个可以说是最初始的FastCGI的版本,可惜的是现在作者已经好久没有维护了,现存编译好的版本非常少,其官方网站更多的是以一个“标准”的姿态出现的。现在给出通过官方网站没法直接找到的两个地址,一个是下载地址http://www.fastcgi.com/dist/,另外一个是相关的配置参数的文档http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html。虽然是官方标准,但是不建议在生产环境中直接使用,因为它特别的不稳定,而且兼容性极差。

    (2) mod_fcgid v2.2:官方地址是http://fastcgi.coremail.cn/,不过网站现在打不开了,所幸的是可以在http://www.apachelounge.com/download/网站上下载。fcgid是在fastcgi的基础上进行了扩展和优化,并且针对Apache的新版本做了及时的更新,使得可以在生产环境下使用,二者具体的区别可以阅读下面的参考资料。原来在coremail上所提供的文件因为现在网站没法访问,所以具体的关于ApacheLounge上所提供的mod_fcgid2.2和coremail上所提供的有什么区别我不是很了解。所幸我找到了作者的邮箱,通过跟作者邮件沟通了解到,原来作者在做完第一个版本的fcgid之后就将源代码发布到了网上,后来ApacheLounge的Steffen使用源代码重新在Windows下面编译后发布了可以直接使用的二进制版本的mod_fcgid.so文件。同时,Steffen也是Apache Windows版本的一个维护者。经过试用,我感觉这个版本的mod_fcgid是最适合在Windows环境下使用的。

    (3) mod_fcgid v2.3.x +:官方地址为http://httpd.apache.org/mod_fcgid/,相关文档地址为:http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html。这个是目前Apache官方所提供的mod_fcgid,目前最新版本为2.3.4。通过作者了解到,这个是作者将原来放在coremail上的mod_fcgid代码捐献给Apache之后由Apache官方来维护的一个版本,可以说是2.2版本之后的后续版本。但是我在Windows上面使用之后感觉不是很稳定,Apache总是隔一段时间就自动关闭,不知道是我设置的问题还是其他问题。

    综合来看,上面三个版本的情况如下:

  • mod_fastcgi:最初始的标准版本,适合开发,不适合直接在生产环境中使用;
  • mod_fcgid v2.2:目前在Apache Lounge上提供下载,个人认为是最适合在Windows环境下使用的一个版本,缺点是因为原来的fastcgi.coremail.cn网站已经不能访问,所以所参考的文档极少;
  • mod_fcgid v2.3.x +:最新最稳定的官方版本,其特点是目前mod_fcgid中最新的版本,而且是有官方来维护,文档内容也非常丰富。但以我个人使用来看,在Windows环境下不是很稳定。
  • 更新(2010.1.8):经过同mod_fcgid原作者Ryan Pan (Pan Qingfeng, pqf or 潘庆峰)沟通,他已经答应将原来在http://fastcgi.coremail.cn/的内容放到本站做镜像,详细说明见http://www.javatang.com/mod_fcgid-v2-2-mirror

    附同mod_fcgid作者沟通的邮件内容(经本人允许):

    庆峰,你好!
    很冒昧的给你发mail,我是mod_fcgid的使用者,有个疑问一直未知,就是关于mod_fcgid版本的问题。我现在在网络上找到三种mod_fcgid的版本:
    (1) 在http://www.apachelounge.com/download/上列出的两个mod_fcgid-2.2b-w32.zip(用于Apache 2.2.9+)和 mod_fcgid-2.2a-w32.zip(用于Apache 2.2.0到2.2.8),作者好像是Steffen。
    (2) 在http://fastcgi.coremail.cn/index.cn.htm(现在无法访问了)上也有一个mod_fcgid,作者的信息我只在ChinaUnix找到一个帖子http://bbs3.chinaunix.net/thread-320106-1-1.html,有人说跟上面的是同一个,但因为网站无法访问,所以没有办法看到。
    (3) 最后一个就是你写的mod_fcgid了,官方地址是http://httpd.apache.org/mod_fcgid/,现在的版本是2.3.4,详细文档地址是http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html。
    因为想在实际的项目中使用mod_fcgid加载PHP,所以还望解答我的疑问,非常感谢!
    顺颂商祺!
    马志勇 (Jet Ma)
    =========================
    Hi, 马先生
    (1)其实是专门维护Windows版Apache的一位外国朋友做的,源代码也是来自标准的mod_fcgid, 不过Steffen维护的是Windows版的编译好的mod_fcgid.so,方便大家直接使用(Windows很多人没有安装编译工具,直接给源代码大家基本上没多少人可以用的上)
    (2) 之前做mod_fcgid的时候,代码和文档一直放在这里的,但是后来代码捐献了给Apache之后,这里就不再维护了,另外最近公司服务器做了一些调整,我也改不了redirect到apache网站了
    (3) 这是当前官方的mod_fcgid, 维护的是最新最稳定的mod_fcgid, Apache软件基金会的程序员(我也是其中之一)正在维护这个项目,如果您有什么问题,可以直接在Apache的邮件列表提出的(不过使用问题最好不要在开发邮件列表提出了)

    Thanks

    参考资料:
    mod_fastcgi和mod_fcgid的区别
    Windows 下 Apache 1.3 以 FastCGI 模式运行 PHP

    Subversion和Apache的安装使用指南

    Filed under: JavaPlateform,Web&Server — Jet @ 5:21 上午
    原文出处: Subversion和Apache的安装使用指南
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    虽然Subversion(SVN)直接可以注册为服务程序,但是最方便的还是使用SVN+Apache的方式,因为可以无防火墙限制、方便直接使用浏览器对代码进行浏览等等。下面我就将自己在Windows下安装Subversion(SVN)和Apache的方法记录一下:

    1. 从Apache网站上下载Apache的安装包进行安装,这个过程比较简单。需要注意Apache的版本,本文采用2.2,当然也可以使用2.0版本。假定Apache的安装目录为D:\apache2。

    2. 在http://subversion.tigris.org/官方下载Subversion的Windows下面与Apache的配合版本,这里需要注意Apache的版本,2.0和2.2的是不一样的,不要下载错了。

    然后将下载下来的zip包解压缩到一个目录,比如D:\svn-win32-1.6.6。

    3. 将svn安装目录的bin目录下面的mod_authz_svn.so和mod_dav_svn.so两个文件拷贝到Apache安装目录的modules目录下面,然后修改Apache的配置文件httpd.conf,将下面两行的注释去掉:

    LoadModule dav_fs_module modules/mod_dav_fs.so
    LoadModule dav_module modules/mod_dav.so

    同时在下面增加两行:

    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so

    4. 接下来就是对SVN进行配置了,配置文件(包含每条的含义)如下:

    # 表示访问SVN的地址,形式为http:///svn
    <Location /svn>
    # 告诉Apache哪个模块负责服务像那样的URL--在这里就是Subversion模块
    DAV svn
    # 在Subversion 1.3及更高版本中,这个指示器使得Subversion列出由SVNParentPath指定的目录下所有的版本库
    SVNListParentPath on
    # 下面制定SVN仓库的位置,有两种选择:
    # (1) 单库:一个Apache下面只有一个SVN仓库,这样的话就使用SVNPath来指定唯一的仓库位置,访问仓库的方式是http:///svn
    # (2) 多库:一个Apache下面可以有多个SVN仓库,这样的话就使用SVNParentPath来指定所有仓库所在的主目录,访问仓库的方式是http:///svn/仓库1、http:///svn/仓库2等等
    SVNPath “D:\Data\SVNData\repository”
    #SVNParentPath “D:\Data\SVNData\repository”

    # 当一个验证对话框弹出时,告诉用户这个验证是用来做什么的
    AuthName “Subversion repositories”
    # 启用基本的验证,比如用户名/密码对,通常来做这样做就已经足够了。
    AuthType Basic
    # 指定密码文件的位置,密码文件中存放了用来验证用户的用户名和密码信息。这个文件的生成方式在后续步骤中会介绍
    AuthUserFile “D:\Data\SVNData\config\passwd”
    # 对版本库和人员进行权限分配,后面会进行详细的设置和介绍。
    AuthzSVNAccessFile “D:\Data\SVNData\config\svnaccessfile”

    # 限定用户只有输入正确的用户名及密码后才能访问这个路径
    Require valid-user
    # 如果想匿名读取的话使用下面的方式
    #<LimitExcept GET PROPFIND OPTIONS REPORT>
    #Require valid-user
    #</LimitExcept>
    </Location>

    5. 接下来使用Apache中的htpasswd.exe命令来生成密码文件,也就是上面AuthUserFile 设置项所指向的文件,切换到Apache安装目录的bin目录下,指向下面的命令:

    # 后面的参数c表示新建文件,在第一次执行的时候使用
    htpasswd -c D:\Data\SVNData\config\passwd <username>
    # 如果是追加新用户或修改原有用户密码,命令后面不加参数c
    htpasswd D:\Data\SVNData\config\passwd <username>

    每次执行命令之后会提示输入两遍密码

    6. 这个时候如果重启Apache的话会出现一个错误提示,这个是因为svn所使用的一些dll文件apache还无法获取,解决的方法可以将svn安装目录的bin目录下面的dll文件拷贝到系统的system32目录下面,但最好的方式是将bin目录加入到path环境变量中。

    7. 这个时候如果访问http:///svn的话,应该会出现一个登录框,输入用户名/密码之后就可以看到SVN仓库的内容了。不过常见下面的几个错误:
    (1) 出现“403 Forbidden”错误
    出现这个错误的原因有很多种,比如Apache2.2相对于之前的版本来说增强了安全性,默认情况下目录是禁止访问的,将“<Directory />”修改如下:

    <Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Allow from all
    </Directory>

    如果这样还不行的话那就是“多库还是单库”的问题了。上面讲过,在对SVN进行配置的时候,使用SVNParentPath设置所有库的根目录,在根目录下面存放多个SVN的库,那这样的话直接访问父目录是没有权限的,只能通过http:///svn/project1来访问对应的项目仓库;如果使用SVNPath设置为单库的话则不会出现这个错误了。

    (2) 出现“<m:human-readable errcode=”720003″>Could not open the requested SVN filesystem</m:human-readable>”错误
    出现这个错误是告诉你你所指定的SVN仓库的位置并不是一个合法的SVN仓库,解决的方法是首先创建一个空目录,然后使用“svnadmin create”命令来创建SVN库:

    # 首先进入 D:\Data\SVNData\repository 目录下
    md project1
    svnadmin create D:\Data\SVNData\repository\project1

    8. 最后安装SVN客户端就可以访问啦,Eclipse集成的客户端推荐使用Subclipse,Visual Studio集成的客户端推荐使用ankhsvn,系统集成的客户端推荐使用TortoiseSVN

    参考资料:
    [翻译] windows安装基于Apache的SVN服务器(包括SSL配置)
    基于svnserve的服务器,权限文件authz配置的常见问题及解答
    Forbidden access or bad repository ?
    Subversion for Windows 安裝指南

    下一页 »