万能服务器学习笔记
万能WEB 服务器整合笔记一环境:Windows 7/windows server 2008Jdk (java_ee_sdk-6u1-jdk-windows.exe)Tomcat (apache to
万能WEB 服务器整合笔记
一环境:
Windows 7/windows server 2008
Jdk (java_ee_sdk-6u1-jdk-windows.exe)
Tomcat (apache tomcat6.0.18.ZIP)(免安装包,只需配置环境变量) Apache (httpd-2.2.17-win32-x86-no_ssl.msi)
Jk (mod_jk-1.2.31-httpd-2.2.3.so)(同时下载相同jk 版本的source 文件) Jk 的源文件(tomcat-connectors-1.2.31-src.zip )
二首要工作
1. 安装JDK ,并配置环境变量(path= java_homebin;java_homejrebin; classpath=java_homelibdt.jar; java_homelibtools.jar)
2. 安装tomcat 。解压apache tomcat6.0.18.ZIP 到安装目录,配置环境变量(classpath= tomcat_homebin;)
3. 安装apache
安装完后分别测试,确保tomcat 、apache 都能正常运行。
三 JSP 的整合
一 tomcat jk apache 整合
(以我的安装目录为例来讲。Apache :D:Apache2.2 Tomcat :D:apache-tomcat-6.0.18) 步骤:
1. 分别解压jk 的安装包和资源包,将安装包下的xxx.so 文件重命名为mod_jd.so并复制到D:Apache2.2manual文件夹中。将资源包下面conf 文件夹下面的httpd-jk.conf 、worker.properties 文件复制到D:Apache2.2conf文件夹中。
2. 打开D:Apache2.2conf 目录下的apache 配置文件httpd.conf ,在文件中找到Include conf/extra/httpd-vhosts.conf 代码,并将其前面的注释去掉(去掉#)。
3. 打开D:Apache2.2confextra目录下的httpd-vhosts.conf 文件,在文件中找到NameVirtualHost *:80代码,然后在其上面一行添加代码:Include conf/httpd-jk.conf(既把这个文件加载进去) 。再在该文件的最后添加一个VirtualHost ,代码如下:
ServerAdmin #可以随便写
DocumentRoot "C:/www/zcglxt" #工程目录
ServerName #访问站点的域名
ServerAlias 172.31.10.168 #域名别名
ErrorLog "logs/dummy-host2.storm.com-error.log" #日志文件
CustomLog "logs/dummy-host2.storm.com-access.log" common #日志文件 # All requests go to tomcat1 by default
JkMount /* tomcat1 #tomcat1是随后workers.properties 文件中的一实例 # JkMount /* tomcat1 表示把所有请求都抛给tomcat1处理
# Serve html, jpg and gif using httpd
,JkUnMount /*.html tomcat1
# JkUnMount /*.html表示所有的.html 都不抛给tomcat1, 由Apache 自己处理。
JkUnMount /*.jpg tomcat1 JkUnMount /*.gif tomcat1
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
4. 打开D:Apache2.2conf中的workers.properyies 文件,在第一行未注释的代码前面添加
如下代码:worker.list=tomcat1
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=8009
5. 打开D:apache-tomcat-6.0.18conf目录下的server.xml 文件,在后面再添加一个虚拟机:
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
6. 修改主机映射文件:用文本编辑器打开C:WindowsSystem32driversetc中的hosts 文件,添加映射:127.0.0.1 www.zcglxt.com (这样做就可以用域名 www.zcglxt.com 来访问站点)
7. 在c:wwwzcglxt目录下放一个web 工程(至少包含一个.jsp 和一个.html 文件),分别用、http://www.zcglxt.com:8080 访问.jsp,.html 页面。只启动apache 时,只可以访问.html 文件,访问.jsp 文件时会报503错误,这是合理的的。同时启动apache 和tomcat ,所有文件都能访问,且用80端口和8080端口访问的页面显示的效果应该是一样的。
注释及注意事项
1:
在配置过程中httpd-jk.conf 文件没做任何修改,这是因为我们在把jk 文件拷贝到
D:Apache2.2manual文件中时把名字修改成了:mod_jk.conf .
Httpd-jk.conf 中的主要代码如下:
LoadModule jk_module modules/mod_jk.so #加载mod_jk.so
JkWorkersFile conf/workers.properties #加载workers.properties
# Our JK error log
# You can (and should) use rotatelogs here
JkLogFile logs/mod_jk.log #添加日志文件,便于排错
# Our JK log level (trace,debug,info,warn,error)
,JkLogLevel info
# Our JK shared memory file
JkShmFile logs/mod_jk.shm
2.
Workers.properties 文件中的worker 是用来连接tomcat 和apache 通信的中间件,上面配置了一个实例tomcat1:
worker.list=tomcat1
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=8009
ajp 是tomcat 与apache 通信的协议,13是版本号。localhost 表示与本机的tomcat 通信,可以设成具体的ip 地址。8009是tomcat 中ajp 协议的默认端口。这个可以在tomcat 的配置文件server.xml 文件中看到。这两处的端口必须一致。
3
在配置tomcat 中的虚拟机时,
4. 配置apache 中的虚拟机时,为了安全,官方建议先默认把所有请求都抛给tomcat ,然后再用JkUnMount 排除需要由apache 助理的文件。其次在配置apache 中的虚拟机时还必须配置
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
这段是用于权限控制,如果不加,则会报403错:you don’t hava permission to access/on this server 。
二. 负载均衡
(前提:apache 与tomcat 已整合成功)
步骤:
1. 打开D:Apache2.2conf中的workers.properties 文件 ,找到代码段:
将8109改为8009,并且在后面再添加一行代码变为:
worker.balancer.balance_workers=node1
worker.node1.reference=worker.template
worker.node1.host=localhost
worker.node1.port=8009
worker.tomcat1.lbfactor =1
继续往下找到node2代码段:
,worker.balancer.balance_workers=node2
worker.node2.reference=worker.template
worker.node2.host=localhost
worker.node2.port=8209
并将其代码段改为:
worker.balancer.balance_workers=node2
worker.node2.reference=worker.template
worker.node2.host=172.31.8.58
worker.node2.port=8009
worker.node2.lbfactor =1
2. 在apache 中添加或者修改原有虚拟主机(tomcat 中的虚拟机也要做相应修改或添加, 这
里略)
ServerAdmin webmaster@dummy-host2.storm.com
DocumentRoot "C:/www/test"
ServerName www.test.com
ServerAlias 172.31.10.168
ErrorLog "logs/dummy-www.test.com.log"
CustomLog "logs/dummy-www.test.com.log-access.log" common
# All requests go to worker1 by default
JkMount /* balancer
#balancer也是一个workers 实例,但它的type 不是ajb, 而是lb 。(别急下面会讲到。) # Serve html, jpg and gif using httpd
JkUnMount /*.html balancer
JkUnMount /*.jpg balancer
JkUnMount /*.gif balancer
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
3. 同时启动本机的tomcat 和173.31.8.58上的tomcat ,用(需要在hosts 中
配置映射)访问站点,可以看到程序在本机tomcat 和172.31.8.58上来回执行。
注释及注意事项。在默认的worders.properties 文件中已经实例化了一个worker (balancer )用来实现负载均衡。主要代码如下:
worker.list=balancer
worker.balancer.type=lb (类型为lb, )
worker.balancer.balance_workers=node1 (参与实现负载的成员node1)
worker.node1.reference=worker.template
worker.node1.host=localhost (node1所在主机)
worker.node1.port=8009
worker.balancer.balance_workers=node2(参与实现负载的成员node2)
,worker.node2.reference=worker.template (采用继承来定义成员的type 等属性) worker.node2.host=172.31.8.58 (node2所在主机)
worker.node2.port=8009
worker.template.type=ajp13 (type 为ajp13, 既用来处理请求的workers )
worker.template.socket_keepalive=true
worker.template.ping_mode=A
… …
上面的node1,node2 都是具体的workers, 与整合例子中的tomcat1是一种性质的。他们可以在开始就声明 :worker.list=node1,node2(官方文档上说多个worker 可以用“,”隔开,但是我实际用的时候报错,还是得分开写worker.list=node1 worker.list=node2),只是当这些worker 只用与负载均衡时,则可以不声明,直接这样用:worker.balancer.balance_workers=node2。
worker.node2.reference=worker.template,这是种类似继承的用法,把其他的worker 的属性都配在worker.template 中,
如:worker.template.type=ajp13 worker.template.socket_keepalive=true
worker.template.ping_mode=A
node2一旦调用:worker.node2.reference=worker.template,它就具有了上面的上属性。这样便于维护,修改。
上面的worker.node2.lbfactor =1 表示加载因子,如果两个节点都是1,则他们将按1:1获得请求量,你可以按需求修改。
你可以根据自己需求来添加和减少参与负载均衡的 tomcat 实例个数。
三 tomcat 集群
(前提 负载均衡已经成功)
集群其实就是在负载均衡的基础上实现同一session 的复制,即当我在tomcatA 上建立了session ,如果tomcatA 突然故障或者因为负载均衡的原因,我发的第二次数据跳到了tomcatB 上,这时候我还能用在tomcatA 上建立的session id与之会话 而不是重先在tomcatB 上建立新的session id 。
如果只是希望某个工程实现session 复制,只需在该工程的web.xml 文件中
如果希望tomcat 下所有的工程都实现session 复制,则可以修改tomcat 安装目录下conf 文件夹中的context.xml 文件。将其中的
JK apache tomcat(负载均衡、集群、more web per IP)综合例子
1环境
三台PC
PCA(ip:172.31.14.85 安装apache ,tomcat 。 路径:apache :D:Apache2.2 tomcat :
,D:apache-tomcat-6.0.18))
PCB(ip:172.31.8.58 仅安装tomcat 路径tomcat :D:apache-tomcat-6.0.18)
PCC(ip:172.31.10.168 只用于访问站点 )
(这些IP 地址是我实验时的真实地址,你可以自行修改,但切记要保证网络畅通): 2 步骤
PCA 上:
a. 把jk 资源文件包里的workers.properties 、httpd-jk.conf 文件拷贝到D:Apache2.2conf
文件夹中,并对worker.properties 文件 node1和nodel2的部分属性进行修改:
worker.balancer.balance_workers=node1
worker.node1.reference=worker.template
worker.node1.host=localhost
worker.node1.port=8009
worker.balancer.balance_workers=node2
worker.node2.reference=worker.template
worker.node2.host=172.31.8.58
worker.node2.port=8009
worker.node2.lbfactor =1
b. 把mod_jk-1.2.31-httpd-2.2.3.so文件放进D:Apache2.2manual文件夹,并改名为mod_jk.so。 c. 打开D:Apache2.2conf 下的httpd.conf ,去掉Include conf/extra/httpd-vhosts.conf 代码的注释(去掉#)。
d. 打开D:Apache2.2confextra下的httpd-vhosts.conf 文件,找到NameVirtualHost *:80代码,在其前一行添加代码:Include conf/httpd-jk.conf
e .继续 在httpd-vhosts.conf 文件的末尾添加虚拟机, 代码如下:
ServerAdmin webmaster@dummy-host2.storm.com
DocumentRoot "C:/www/zcglxt"
ServerName www.zcglxt.com
ErrorLog "logs/dummy-host2.storm.com-error.log"
CustomLog "logs/dummy-host2.storm.com-access.log" common
# All requests go to worker1 by default
JkMount /* balancer
# Serve html, jpg and gif using httpd
JkUnMount /*.html balancer
JkUnMount /*.jpg balancer
JkUnMount /*.gif balancer
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
,ServerAdmin webmaster@dummy-host2.storm.com
DocumentRoot "C:/www/test"
ServerName www.test.com
ErrorLog "logs/dummy-www.test.com.log"
CustomLog "logs/dummy-www.test.com.log-access.log" common
# All requests go to worker1 by default
JkMount /* balancer
# Serve html, jpg and gif using httpd
JkUnMount /*.gif balancer
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
f. 打开D:apache-tomcat-6.0.18conf中的server.xml 文件,修改虚拟主机:()
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
(apache 和tomcat 中的虚拟主机目录要相同)
PCB 上的配置:
在这台机子上只需配置tomcat 的虚拟机。(同PCA 中第f 步的配置完全一样)
PCC 上的配置
这台电脑主要是用来访问站点,作测试用。用记事本打开本机
,C:WindowsSystem32driversetc下的hosts 文件,在文中添加代码
172.31.14.85 www.test.com
172.31.14.85 www.zcglxt.com
写好两个web 工程分别同时对应地放到apache 和tomcat 的虚拟机目录中。在pcc 中打开IE 用www.test.comm 、 、:8080 、 :8080访问站点,并观看PCA 和PCB 上的tomcat 后台信息。
总结:
apache 与tomcat 通过 ajp 协议通信,它通过 JkUnMount 和
JkMount 来决定那种类型的数据请求由自己处理,哪种需要tomcat 来处理。如果不做负载均衡,只要把数据抛给ajp 类型的worker ,直接由worker 自己来处理。如果需要做负载均衡,则apache 需要把数据交给lb 类型的worker ,再由lb 类型的worker 将数据请求按平衡加载因子(lbfactor )比例分发给参与负载均衡的ajp 类型的worker 来处理。要实现集群,也就是要保证session 能够共享,如果只想指定的web 工程有需要session 共享,则只需将该工程下的web.xml 文件中添加
IIS apache
在apache 的conf 中 打开代理:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
在虚拟机中配置:
#ProxyPreserveHost On
ServerAdmin webmaster@dummy-host2.storm.com DocumentRoot "F:/www/asp2"
ServerName www.aspa.com
ServerAlias 172.31.10.168
ErrorLog "logs/www.asp.com.log"
CustomLog "logs/www.asp.com.log-access.log" common
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
,ProxyPass / http://www.aspa.com:8081/
ProxyPassReverse / http://www.aspa.com:8081/
DirectoryIndex index.asp default.asp