整合Apache和Tomcat构建Web服务器(2)

四、 apache与tomcat整合配置
本节详细讲述apache和tomcat整合的详细配置过程,这里假定web服务器的IP地址为192.168.60.198,测试的jsp程序放置在/webdata/www目录下,如果没有此目录,需要首先创建这个目录,因为在下面配置过程中,会陆续用到/webdata/www这个路径。
1.创建Tomcat workers
Tomcat worker是一个服务于web server、等待执行servlet/JSP的Tomcat实例,创建tomcat workers需要增加3个配置文件,分别是Tomcat workers配置文件workers.properties,URL映射文件uriworkermap.properties和JK模块日志输出文件mod_jk.log,mod_jk.log文件会在apache启动时自动创建,这里只需创建前两个文件即可。
(1)tomcat workers配置文件
定义Tomcat workers的方法是在apache的conf目录下编写一个名为“workers.properties”的属性文件,使其作为apache的插件来发挥作用,下面讲述workers.properties配置说明。
worker.list用来定义Workers列表,当apache启动时,workers.properties作为插件将初始化出现在worker.list列表中的workers。
定义worker类型的格式:
worker.worker名字.type=
例如:
定义一个名为“tomcat12”的worker,其使用ajp12协议与tomcat 进程通讯:
  worker.tomcat12.type=ajp12
定义一个名为“tomcat13”的worker,其使用ajp13协议与tomcat 进程通讯:
  worker.remote.type=ajp13
  定义一个名为“tomcatjni”的worker,其使用JNI的方式与tomcat 进程通讯
  worker.tomcatjni.type=jni
  定义一个名为“tomcatloadbalancer”的worker,作为对多个tomcat进程的负载平衡使用:
  worker.tomcatloadbalancer.type=lb
设置worker属性的格式为:
worker.worker名字.属性=
这里只说明ajp13协议支持的几个常用属性:
? Host:监听ajp13请求的的tomcat worker主机地址
? Port:tomcat worker主机监听的端口。默认情况下tomcat在ajp13协议中使用的端口为8009。
? lbfactor:当tomcat用作负载均衡时,此属性被使用,表示此tomcat worker节点的负载均衡权值。
下面是我们的workers.properties文件内容:
[root@localhost ~]#vi /usr/local/apache2/conf/workers.properties
worker.list=tomcat1
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
(2)URL过滤规则文件uriworkermap.properties
也就是URI 映射文件,用来指定哪些 URL 由 Tomcat 处理,也可以直接在 httpd.conf 中配置这些 URI,但是独立这些配置的好处是 JK 模块会定期更新该文件的内容,使得我们修改配置的时候无需重新启动 Apache 服务器。
下面是我们的一个映射文件的内容:
[root@localhost ~]#vi  /usr/local/apache2/conf/uriworkermap.properties
/*=tomcat1

!/*.jpg=tomcat1
!/*.gif=tomcat1
!/*.png=tomcat1
!/*.bmp=tomcat1
!/*.html=tomcat1
!/*.htm=tomcat1
!/*.swf=tomcat1
!/*.css= tomcat1
!/*.js= tomcat1
在上面的配置文件中,“/*=tomcat1”表示将所有的请求都交给tomcat1来处理,而这个“tomcat1”就是我们在workers.properties文件中由worker.list指定的。这里的“/”是个相对路径,表示存放网页的根目录,这里是上面假定的/webdata/www目录。
“!/*.jpg=tomcat1”则表示在根目录下,以“*.jpg”结尾的文件都不由JK进行处理,其它设置含义类似,也就是让apache处理图片、js文件、css文件以及静态html网页文件。
特别注意,这里有个先后顺序的问题,JK模块在处理网页根目录文件的时候,会首先过滤掉不让自己处理的设定,剩下的设定自己全部处理。
例如上面的设定中,JK模块会首先在/webdata/www目录过滤掉所有图片、flash、js文件、css文件和静态网页,将剩下的文件类型自己全部处理。
2.Apache的配置
(1)apache的目录结构
上面我们通过源码方式把apache安装到了/usr/local/apache2下,详细的目录结构如表8.1所示:
表8.1
目录名称 目录作用
bin Apache二进制程序及服务程序目录
lib 库文件目录
conf 主配置文件目录
logs 日志文件目录
htdocs 默认web应用根目录
cgi-bin 默认的cgi目录
modules 动态加载模块目录,上面生成的JK模块,就放在了这个目录下。
manual Apache使用文档目录
man Man帮助文件目录
error 默认的错误应答文件目录
include 包含头文件的目录
icons Apache图标文件目录
(2)apache的配置文件
? /usr/local/apache2/conf/httpd.conf(apache主要配置文件)
httpd.conf是包含若干指令的纯文本文件,配置文件的每一行包含一个指令,指令是不区分大小写的,但是指令的参数却对大小写比较敏感,“#”开头的行被视为注解并被忽略,但是,注解不能出现在指令的后边。配置文件中的指令对整个web服务器都是有效的。
? /usr/local/apache2/bin/apachectl (apache启动/关闭程序)
可以通过“/usr/local/apache2/bin/apachectl start/stop/restart”的方式启动/关闭/重启apache进程。apachectl其实是个shell脚本,它可以自动检测httpd.conf的指令设定,让apache在最优的方式下启动。
? /usr/local/apache2/bin/httpd
httpd是一个启动apache的二进制文件。
? /usr/local/apache2/modules
Apache是模块化的web服务器,所有编译的模块默认都会放到这个目录下,然后可以在httpd.conf文件中指定模块位置,动态加载!
? /usr/local/apache2/logs/access_log
/usr/local/apache2/logs/error_log
 这两个分别为apache的访问日志文件和错误日志文件,通过监测这两个文件,我们可以了解apache的运行状态。
(3)httpd.conf基本设定
httpd.conf配置文件有3个部分组成,分别是:全局变量、配置主服务器、配置虚拟主机。
下面我们详解讲述下/usr/local/apache2/conf/httpd.conf文件各个指令的含义。
[root@webserver ~]#vi /usr/local/apache2/conf/httpd.conf
全局变量配置部分
ServerRoot "/usr/local/apache2"
ServerRoot用于指定守护进程httpd的运行目录, httpd在启动之后自动将进程的当前目录切换到这个指定的目录下,可以使用相对路径和绝对路径。
PidFile logs/httpd.pid
PidFile指定的文件将记录httpd守护进程的进程号,由于httpd能自动复制其自身,因此apache启动后,系统中就有多个httpd进程,但只有一个进程为最初启动的进程,它为其他进程的父进程,对父进程发送信号将影响所有的httpd进程。
Timeout 300
Timeout用来定义客户端和服务器端程序连接的超时间隔,单位为秒,超过这个时间间隔,服务器将断开与客户端的连接。
KeepAlive On
KeepAlive用来定义是否允许用户建立永久连接,On为允许建立永久连接,Off表示拒绝用户建立永久连接,例如,要打开一个含有很多图片的页面,完全可以建立一个tcp连接将所有信息从服务器传到客户端即可,而没有必要对每个图片都建立一个tcp连接。此选项建议设置为On。
MaxKeepAliveRequests 100
  MaxKeepAliveRequests用来定义一个tcp连接可以进行HTTP请求的最大次数,设置为0代表不限制请求次数,这个选项与上面的KeepAlive相互关联,当KeepAlive设定为On,这个设置开始起作用。
KeepAliveTimeout 15
  KeepAliveTimeout用来限定一次连接中最后一次请求完成后延时等待的时间,如果超过了这个等待时间,服务器就断开连接。
<IfModule prefork.c>
ServerLimit  300
StartServers         5
MinSpareServers      5
MaxSpareServers     20
MaxClients         300
MaxRequestsPerChild  2000
</IfModule>

<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
上面的两段指令其实是对web服务器的使用资源进行的设置,apache可以运行在prefork和worker两种模式下,可以通过/usr/local/apache2/bin/httpd –l来确定当前apache运行在哪种模式,在编译apache时,如果指定“--with-mpm=MPM”参数,那么apache默认运行在prefork模式下,如果指定的是“--with-mpm=worker”参数,那么默认运行在worker模式下。如果没有做任何模式指定,那么apache默认也运行在prefork模式下。
prefork采用预派生子进程方式,用单独的子进程来处理不同的请求,进程之间彼此独立。
? StartServers表示在启动apache时,就自动启动的进程数目。
? MinSpareServers设置了最小的空闲进程数,这样可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
? MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,apache会自动关闭这些多余进程,如果这个值设置的比小MinSpareServers,则Apache会自动把其调整为 MinSpareServers+1。
? MaxRequestsPerChild设置了每个子进程可处理的最大请求数,也就是一个进程能够提供的最大传输次数,当一个进程的请求超过此数目时,程序连接自动关闭。0意味着无限,即子进程永不销毁。这里我们设置为2000,已经基本能满足中小型网站的需要。
? MaxClients设定Apache可以同时处理的请求数目。是对Apache性能影响最大的参数,默认值150对于中小网站基本够了,但是对于大型网站,是远远不够的,如果请求总数已达到这个值,那么后面的请求就必须排队,这就是系统资源充足而网站访问却很慢的主要原因。理论上这个值设置的越大,可以处理的请求的越多,但是apache默认限制不能超过256,如果要设置的值大于256,可以直接使用ServerLimit指令加大MaxClients。这里我们设置的值是300。
相对于prefork,worker是全新的支持多线程和多进程的混合模型,由于是使用线程来处理请求,所以可以处理更多的请求,对系统资源的使用开销也比较小。
? MinSpareThreads设置了最少的空闲线程数。
? MaxSpareThreads设置了最多的空闲线程数。
? MaxClients设定同时连入客户端的最大数。如果现有子进程中的线程总数不能满足请求的负载,控制进程将派生出新的子进程。默认最大子进程数是16,加大时需要通过ServerLimit来进行声明,ServerLimit最大值为20000,注意,如果指定了ServerLimit,那么此值乘以ThreadsPerChild必须大于等于MaxClients,而MaxClients必须是ThreadsPerChild的整数倍,否则 Apache将会自动调节到一个相应值。
? ThreadsPerChild设定每个子进程的工作线程数,此选项在worker模式下与性能密切相关,默认最大值为64,如果系统负载很大,不能满足需求���话,需要使用 ThreadLimit指令,此指令默认最大值为20000,Worker模式下所能同时处理请求总数由子进程数乘以ThreadsPerChild值来确定,保证大于等于MaxClients的设定值。
Listen 80
此指令是设置apache的监听端口,默认的http服务都是运行在80端口下,当然也可以修改为其它端口。
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
LoadModule jk_module modules/mod_jk.so
加载mod_jk模块,上面我们已经生成了JK模块,并且放到了modules目录下,这里这需指定加载即可。
……以下省略……

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wywjjz.html