windows 下的Apache HTTP Server2配置
一、Apache+php+mysql配置1、安装包:
apache_2.2.14-win32-x86-openssl-0.9.8k.msi
php-5.2.11-Win32.zip(路径不要用空格)
mysql-essential-5.1.37-win32.msi
2、配置PHP
使用php.ini-recommended,将其备份后改名为php.ini,用文本编辑器将其打开。首先查找extension_dir,它用于指定PHP扩展dll的位置,根据注释可以将On windows下的那一行改成:
extension_dir = "D:\soft_env\PHP\ext"
然后查找doc_root,它用于指定Web服务器的根路径, 将其改成:
#根据实际情况来定
doc_root = "D:\soft_env\Apache2.2\htdocs";
之后选择运行一些PHP必须的扩展,查找extension,将下面几个extension前的注释分号去掉。
extension=php_gd2.dll
extension=php_imap.dll
extension=php_mysql.dll; #使用MySQL必需
extension=php_mysqli.dll; #使用MySQL必需
3.配置Apache
打开httpd.conf文件,配置加载php模块。
# 载入php模块
LoadModule php5_module D:/soft_env/PHP/php5apache2_2.dll
# 指定php.ini的路径
PHPIniDir "D:/soft_env/PHP"
# 允许php语法在.php文件中使用
AddType application/x-httpd-php .php
# 允许php语法在.html文件中使用
AddType application/x-httpd-php .html
如果需要改变Web根路径,可以查找DocumentRoot,将相关行修改:
DocumentRoot "D:/soft_env/Apache2.2/htdocs"
<Directory "D:/soft_env/Apache2.2/htdocs">
DirectoryIndex,此处用于指定url为一目录时默认载入文件的顺序,通常为index.html, default.html等等,针对php可以采用如下的设置:
DirectoryIndex index.php index.html default.php default.html
注意文件名的中间用空格隔开。
可以测试PHP是否正常工作了,在Web根路径(默认为Apache安装目录的htdocs)下新建一个test.php文件,添加以下一行内容
<?php phpinfo(); ?>
二、Apache + Tomcat + Jk 配置
Apache HTTP服务器本身没有提供Servlet/JSP容器。因此,在实际应用中,把Tomcat与Apache集成,可以建立具有实用价值的商业化的Web平台。整合 Apache Http Server 和 Tomcat 可以提升对静态文件的处理性能、利用 Web 服务器来做负载均衡以及容错、无缝的升级应用程序。
1、安装包
apache_2.2.14-win32-x86-openssl-0.9.8k.msi
apache-tomcat-6.0.20.zip
mod_jk-1.2.28-httpd-2.2.3.so
mod_jk下载,下载后,重命名为 mod_jk.so,放入apache httpd 的 modules目录下。
2、配置Apache HTTP Server2.2
打开其配置文件 httpd.conf,加入载入模块的配置。
#建议将其加在 mod_rewrite的前面
LoadModule jk_module modules/mod_jk.so
在配置文件的末端加入:
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
# Set the jk log level
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
在conf目录下新建workers.properties,包含以下内容:
# Define 1 ajp13 worker
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=127.0.0.1
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
把某些路径映射到Tomcat服务器去处理。
在httpd.conf中加入:
JkMount /* worker1
这时候,当你访问 http://localhost就相当于访问 http://localhost:8080
3、使用vhost
修改httpd.conf,加载相应模块。
LoadModule vhost_alias_module modules/mod_vhost_alias.so
将以下这句的注释取消。
# Virtual hostsInclude conf/extra/httpd-vhosts.conf
打开conf/extra/httpd-vhost.conf,加入以下内容。
<VirtualHost core.test.net:80>
ServerAdmin lazing@test.net
ServerName core.test.net
JkMount /* worker1
</VirtualHost>
完成后,当输入 http://localhost/ 时,访问httpd原来的资源,输入 http://core.test.net/ 时,相当于访问http://localhost:8080/ (修改了hosts文件)。
4.关于AJP(Apache Jserv Protocol)协议
AJP是为Tomcat与HTTP服务器之间通信而定制的协议,能提供较高的通信速度和效率。AJP13是定向包协议。因为性能原因,使用二进制格式来传输可读性文本。WEB服务器通过TCP连接和SERVLET容器连接。为了减少进程生成socket的花费,WEB服务器和SERVLET容器之间尝试保持持久性的TCP连接,对多个请求/回复循环重用一个连接。一旦连接分配给一个特定的请求,在请求处理循环结束之前不会在分配。换句话说,在连接上,请求不是多元的。这个是连接两端的编码变得容易,虽然这导致在一时刻会有很多连接。
一旦WEB服务器打开了一个到SERVLET容器的连接,连接处于下面的状态:
◆ 空闲
这个连接上没有处理的请求。
◆ 已分派
连接正在处理特定的请求。
一旦一个连接被分配给一个特定的请求,在连接上发送的基本请求信息是高度压缩的。在这点,SERVLET容器大概准备开始处理请求,当它处理的时候,它能发回下面的信息给WEB服务器:
◆ SEND_HEADERS
发送一组头到浏览器。
◆ SEND_BODY_CHUNK
发送一块主体数据到浏览器。
◆ GET_BODY_CHUNK
从请求获得下一个数据如果还没有全部传输完,如果请求内容的包长度非常大或者长度不确定,这是非常必要的。例如上载文件。注意这和HTTP的块传输没有关联。
◆ END_RESPONSE
结束请求处理循环。
5.关于JK插件
Tomcat提供了专门的JK插件来负责Tomcat和HTTP服务器的通信。应该把JK插件安置在对方的HTTP服务器上。当HTTP服务器接收到客户请求时,它会通过JK插件来过滤URL,JK插件根据预先配置好的URL映射信息,决定是否要把客户请求转发给Tomcat服务器处理。
假定在预先配置好的URL映射信息中,所有"/*.jsp"形式的URL都由Tomcat服务器来处理,那么在请求index.jsp例子中,JK插件将把客户请求转发给Tomcat服务器,Tomcat服务器于是运行index.jsp,然后把响应结果传给HTTP服务器,HTTP服务器再把响应结果传给Web客户。
对于不同的HTTP服务器,Tomcat提供了不同的JK插件的实现模块。
在实际应用中,假如网站的访问量非常大,为了提高访问速度,可以将多个Tomcat服务器与Apache集成,让它们共同分担运行Servlet/JSP组件的任务。 JK插件的loadbalancer(负载平衡器)负责根据在workers.properties文件中预先配置的lbfactor(负载平衡因数)为这些Tomcat服务器分配工作负荷,实现负载平衡。
6、属性说明
(1)workers.properties文件的属性
[*]workers.tomcat_home: 指定tomcat的根目录。
[*]workers.java_home: 指定JKD根目录。
[*]worker.list: tomcat服务器工作名单。
[*]worker.worker1.port: tomcat服务器使用的JK端口。
[*]worker.worker1.host: tomcat服务器IP。
[*]worker.worker1.type: tomcat服务器与apache之间的通信协议。
[*]worker.worker1.lbfactor: 负载平衡因数(load balance factor),只有在使用了负载平衡器(loadBalancer)的情况下,才有意义。
(2)JK插件的相关属性
[*]LoadModule: 指定加载的JK插件。
[*]JkWorkersFile: 指定JK插件的工作文件。
[*]JkLogFile: 指定JK所使用的日志文件。
[*]JkLogLeveldebug: 指定日志级别(debug/info/error)。
[*]JkMount: 指定JK插件所处理的URL映射信息。
(3)负载平衡器配置
worker.list=loadbalancer
#Define the LB worker
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=worker1,worker2
worker.loadbalancer.local_worker_only=1
worker.loadbalancer.sticky_session=true
worker.loadbalancer.sticky_session_force=true
注:以上定义了两个worker,一个为worker1,另一个为worker2,定义了一个负载平衡服务器loadbalancer,其中标蓝色的为重点配置项,相关的详细说明可以看官方的网站文档:http://tomcat.apache.org/connectors-doc/
worker.list=loadbalancer
设定工作的负载平衡器,各Tomcat节点不能加入此列表。
worker.worker1.lbfactor
负载平衡的权重比,如果此权重比越大,则分配到此节点的请求越多,如以上两个节点的权重比为1:1,则为平均分配。
worker.loadbalancer.balance_workers=worker1,worker2
指定此负载平衡器负责的Tomcat应用节点。
worker.loadbalancer.sticky_session=true
此处指定集群是否需要会话复制,如果设为true,则表明为会话粘性,不进行会话复制,当某用户的请求第一次分发到哪台Tomcat后,后继的请求会一直分发到此Tomcat服务器上处理;如果设为false,则表明需求会话复制。
worker.loadbalancer.sticky_session_force=true
如果上面的sticky_session设为true时,建议此处也设为true,此参数表明如果集群中某台Tomcat服务器在多次请求没有响应后,是否将当前的请求,转发到其它Tomcat服务器上处理;此参数在sticky_session=true时,影响比较大,会导致转发到其它Tomcat服务器上的请求,找不到原来的session,所以如果此时请求中有读取session中某些信息的话,就会导致应用的null异常。
参考:
1.Apache HTTP Server与Tomcat的三种配置方式
2.JK 文档
3.Tomcat开发技术之与HTTP服务器的集成
4. Linux下配置Tomcat群集
页:
[1]