买了一个VPS
由于需求,需要在上面配置可以支持discuz论坛,也可以支持j2ee的项目
配置这个环境搞了我1天多才搞出来,之间很曲折啊,于是用记录下过程,希望能帮助需要帮助的人。
网上非常多的 apache+tomcat+php
但是都非常旧了,不适合,而且有的地方还有误导。
vps装的是 windows 2003 sp2的系统
首先是准备软件
discuz http://www.discuz.net/thread-2744369-1-1.html
当前稳定版是 2.5 ,但是必须要5.0以上的php支持
php http://windows.php.net/download
(我选的是稳定版5.3.21,php版本5.3.21以上后,不分V6和V9,网上很多地方说用apache用V6,IIS用V9当时就让我郁闷半天。因为官网上没有V6版本,只有V9,于是索性我下了一个V9,下载下来安装的时候会发现有apache和iis的选项,所以5.3.21以上的版本不分V6,V9,直接支持apache和iis,还有需要注意的是,5.3.21的php对应的apache版本是2.2.x,所以apache版本也就定了)
apache http://httpd.apache.org/download.cgi#apache22
现在稳定版是2.2.23
tomcat http://tomcat.apache.org/download-70.cgi
我选的是32位的解压版7.0.35(个人喜好,我喜欢解压了以后手动批处理注册为系统服务)
Tomcat Connectors JK (Apache就是通过这个插件连接的tomcat)http://apache.dataguru.cn//tomcat/tomcat-connectors/jk/binaries/windows/
要根据apache的版本选择下载 我的是apache2.2.x的 所以下载的是 tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip
我网站根路劲是在D:\WebRoot
D:\WebRoot\qqtool8 放discuz的论坛 域名http://www.qqtool8.com 以下就称A网站
D:\WebRoot\hainayun 放j2ee的海娜韵网站 域名http://www.hainayun.com 以下就称B网站
D:\WebRoot\heyefan 放j2ee的荷叶饭网站 域名http://www.heyefan.cn 以下就称C网站
A网站用php解析,B和C网站都部署在同一个tomcat
第一步:安装apache
apache的安装很简单,不用多说
我的安装路劲是D:\Program Files\Apache Software Foundation\Apache2.2
安装完了可以启动服务 然后在浏览器输入网址http://localhost 看到 it works 就OK了
启动不了看错误日志,注意windows 2003的vps自动开启了iis 需要手动停止并禁用,避免80端口冲突。
第二步:安装php
php安装也简单,我安装的时候把php附加的所有功能都安装上了,表达式什么的,注意到了一个安装界面后 会让你选择 httpserver 有apache 2.2.x 有iis..
所以我这里直接选apache
php安装路劲为:D:\Program Files\PHP
注意安装好了以后 会直接在D:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf
里的最末尾 大概494行处,自动加上php的环境
<span style="font-size:12px;">#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL PHPIniDir "D:\Program Files\PHP\" LoadModule php5_module "D:\Program Files\PHP\php5apache2_2.dll" #END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL</span>
所以不用在apache的httpd.conf里面再手动配置php其他东西了
再看D:\Program Files\PHP\php.ini
查找short_open_tag = Off把它修改成short_open_tag = On,让其支持短标签。
不知道这个短标签干啥的,如果没用就什么都不用改了,网上说的那些表达式,都是默认开启了的,不知道是不是我安装的时候选了所有功能的结果。
安装好了以后自己放一个如index.php的文件到D:\Program Files\Apache Software Foundation\Apache2.2\htdocs(apache的默认web路劲)访问http://localhost/index.php 看php是否正常
第四步:部署tomcat
我的tomcat解压在D:\Program Files\Tomcat
然后手动写个批处理注册为系统服务
不会的可以看看我的这篇文章
http://blog.csdn.net/hexin373/article/details/6631568
启动tomcat的系统服务就可以输入 http://localhost:8080访问了
这个时候 php 和 jsp都可以单独运行了。
第五步:集成apache+tomcat+php
首先说一下原理和目的:
apache收到A网站的请求要用php解析 而且网站目录是D:\WebRoot\qqtool8
apache收到B网站的请求要转发给Tomcat 然后由Tomcat解析D:\WebRoot\hainayun里面的内容
apache收到C网站的请求要转发给Tomcat 然后由Tomcat解析D:\WebRoot\heyefan里面的内容
注意:转发这里就是关键了apache通过mod_jk插件和tomcat的AJP端口连接的,
tomcat默认的ajp端口为 8009
tomcat默认的http端口为 8080
所以这里也我是当时迷惑的地方
当apache和tomcat集成了以后 tomcat的8080http端口就可以不用了 整行都可以注释掉...
你也可以保留,这样你可以用apache的80端口间接访问你的项目,也可以用tomcat的8080端口直接访问你的项目
所以配置mod_jk是重点
开始配置mod_jk
1.把你的mod_jk.so(tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip)解压到D:\Program Files\Apache Software Foundation\Apache2.2\modules下面,这样apache就有了mod_jk支持。
2.在D:\Program Files\Apache Software Foundation\Apache2.2\conf下建立名字为mod_jk.conf的配置文件,内容为:
<span style="font-size:12px;">LoadModule jk_module modules/mod_jk.so JkWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log JkLogLevel info JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " JkRequestLogFormat "%w %V %T"</span>
3.在D:\Program Files\Apache Software Foundation\Apache2.2\conf下建立名字为workers.properties的配置文件,内容为:
worker.list=tomcat1 #这里可以有多个tomcat,比如tomcat2 名字是取的别名,可以随意命名,不过要和后面的对应上
<span style="font-size:12px;">worker.tomcat1.port=8009 worker.tomcat1.host=127.0.0.1 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor=10 #如果有tomcat2 就是如下配置 #worker.tomcat2.port=8019 #worker.tomcat2.host=127.0.0.1 #worker.tomcat2.type=ajp13 #worker.tomcat2.lbfactor=1 </span>
4.在httpd.conf最末尾增加mod_jk的配置
<span style="font-size:12px;">#BEGIN TOMCAT JK# include conf/mod_jk.conf #END TOMCAT JK#</span>
5.查找httpd.conf中httpd-vhosts,大概在470行,Include conf/extra/httpd-vhosts.conf 取消注释,作用是让apache收到A,B,C三个域名后解析到不同的服务器
6.编辑D:\Program Files\Apache Software Foundation\Apache2.2\conf\extra\httpd-vhosts.conf
我的整体配置如下
<span style="font-size:12px;">NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "D:/WebRoot/qqtool8" ServerName www.qqtool8.com ServerAlias www.qqtool8.com ErrorLog "logs/qqtool8.com-error_log" CustomLog "logs/qqtool8.com-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "D:/WebRoot/hainayun" ServerName www.hainayun.com ServerAlias www.hainayun.com ErrorLog "logs/hainayun.com-error_log" CustomLog "logs/hainayun.com-access_log" common <Directory "D:/WebRoot/hainayun/WEB-INF"> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory> <Directory "D:/WebRoot/hainayun"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all DirectoryIndex index.jsp index.html index.htm </Directory> JkMount /* tomcat1 </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "D:/WebRoot/heyefan" ServerName www.heyefan.cn ServerAlias www.heyefan.cn ErrorLog "logs/heyefan.com-error_log" CustomLog "logs/heyefan.com-access_log" common <Directory "D:/WebRoot/heyefan/WEB-INF"> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory> <Directory "D:/WebRoot/heyefan"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all DirectoryIndex index.jsp index.html index.htm </Directory> JkMount /* tomcat1 </VirtualHost> </span>
我把空格都去掉了,因为有空格apache启动不起来,报错。 这里的tomcat1对应上面的workers.properties的tomcat1
上面的属性设置我就不挨个解释了,不懂可以查api,不过直接看英文应该基本都知道是什么作用了。
这样配置好了以后,A网站过来的请求就直接解析到了D:/WebRoot/qqtool8
B和C网站过来的请求分发给了tomcat
第六步:修改tomcat的server.xml(D:\Program Files\Tomcat\conf)
在文件末尾</Engine>标签前添加
<span style="font-size:12px;"><Host name="www.heyefan.cn" appBase="" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="D:\WebRoot\heyefan" debug="0" reloadable="true" /> </Host> <Host name="www.hainayun.com" appBase="" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="D:\WebRoot\hainayun" debug="0" reloadable="true" /> </Host></span>
作用是让tomcat支持多个项目,收到解析后解析到对应的项目路劲。
这里需要特别注意一点 这个问题曾经让我很头疼
http://blog.csdn.net/hexin373/article/details/8291962这里有说
就是docBase和appBase 路劲只能写在docBase,如果写在了appBase,项目是能运行,但是有权限过滤的话,就不起作用!如果你有这个问题,切忌啊...
第七步:部署discuz
修改的配置下Apache的httpd.conf里面的三处
1.查找DirectoryIndex index.html 将其修改成DirectoryIndex index.php default.php index.html index.htm default.html default.htm (索引页)
2.查找DocumentRoot将其修改为指向你需要放置web文件的文件夹上 所以DocumentRoot就是DocumentRoot "D:/WebRoot/qqtool8",根据自己配置来修改。
3.查找第2个<Directory 大概在206行,将其修改为你自己配置的DocumentRoot的路径(我的是<Directory "D:/WebRoot/qqtool8">)
傻瓜式部署,把下载好的压缩包中的 upload文件夹解压到 D:/WebRoot/qqtool8
第八步:部署j2ee的网站
把自己项目放到对应的D:/WebRoot/hainayun和D:/WebRoot/heyefan
第九步:启动apache
如果不出意外,apache就能正常启动了,如果不正常,请看错误日志,如果看不到错误日志以上的每步都要确保正确,每一步配置的时候都检测下配置是否正确。
用命令行
检查错误方法:进入cmd 然后进入 Apache安装目录(具体为你自己的安装目录)\bin> httpd.exe -w -n "Apache2.2" -k start
Apache2.2是我的apache在windows里面的服务名,如果不一样,请修改成你自己的服务名,这样执行后就会提示你httpd.conf的哪一行有问题。
这里还要特别注意一点,就是apache的服务启动了,tomcat的服务也是需要启动的,不然就没有j2ee的web服务器了。刚开始我就搞不清楚配置完以后需要启动些什么。
这样基本上集成就弄完了。
另外linux配置思路也是一样的。
如果还有问题,就检查以上的每一步。
反正当时我配置搞了好久,现在总算搞好了,希望能帮助到看帖的你,呵呵....