jinhonglu 2012-02-29
前两天想放一份pdf的文档到测试服务器上供别人下载,由于公司采用的是apache + 应用服务器的方式来做部署的。之前由于采用的是apache + mod_jk + jboss的部署方案,服务器上的配置基本都是按照这种方式来配置的,后来升级过一次,采用了apache + mod_proxy + jetty的方式进行部署。以为这种方式与之前的方式,只是从中间代理至后端应用服务器有变动,不会影响之前的apache的配置。因为按照之前的配置,静态文件放在htdocs目录下,直接可以供外部用户进行访问。但试了一把,死活不可以,一直报404无法找到文件的错误。后来反复研究httpd.conf文件的配置,终于找到了问题源,是因为配置的代理,将所有请求均指向了后端应用服务器,那即使有些用户只是想访问静态资源,也会被代理至后端jetty服务器。即使在上面配置好了静态资源存放的路径,仍无法访问静态资源文件。现将解决问题的思路梳理一下。
httpd.conf :apache的全局配置文件,在其中可以配置线程数、虚拟服务器地址、反向代理、域名及url跳转规则等等。如果你无法访问静态资源文件,首先就要看该文件中的配置是否正确。
问题一:配置访问路径时,在Directory目录下进行了配置,且服务启动完全正常,但通过外部访问时,总是报403错误。
查了一下error_log日志,结果里面有一条错误日志,如下:
[Mon Feb 27 20:12:262012] [error] [client 10.19.16.17] Symbolic link not allowed or link target notaccessible: /usr/alibaba/httpd
后经排查是由于其中的Options参数设置的问题,Options参数设置问题,修改如下:
修改后的配置如下所示:
问题二:apache服务单独启动时,htdocs中的静态资源可以访问,但当它和jetty同时启动时,结果服务器一切正常,但浏览器总报404找不到该资源。感觉超诡异,郁闷了半天。后来反复查看httpd.conf配置文件,在最后发现有这样的一个配置:
修改配置如下:
修改完后,重启apache及jetty服务器,一切访问正常。问题得以解决。
从上述问题可以看出,采用apache + mod_jk + jboss的配置与采用apache + mod_proxy+ jetty的配置虽然大部分类似,但mod_proxy中具有代理和反向代理的配置,尤其在配置这些地方时需要当心。