是上面假定的/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的配置文件
l /usr/local/apache2/conf/httpd.conf(apache主要配置文件)
httpd.conf是包含若干指令的纯文本文件,配置文件的每一行包含一个指令,指令是不区分大小写的,但是指令的参数却对大小写比较敏感,“#”开头的行被视为注解并被忽略,但是,注解不能出现在指令的后边。配置文件中的指令对整个web服务器都是有效的。
l /usr/local/apache2/bin/apachectl (apache启动/关闭程序)
可以通过“/usr/local/apache2/bin/apachectl start/stop/restart”的方式启动/关闭/重启apache进程。apachectl其实是个shell脚本,它可以自动检测httpd.conf的指令设定,让apache在最优的方式下启动。
l /usr/local/apache2/bin/httpd
httpd是一个启动apache的二进制文件。
l /usr/local/apache2/modules
Apache是模块化的web服务器,所有编译的模块默认都会放到这个目录下,然后可以在httpd.conf文件中指定模块位置,动态加载!
l /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采用预派生子进程方式,用单独的子进程来处理不同的请求,进程之间彼此独立。
l StartServers表示在启动apache时,就自动启动的进程数目。
l MinSpareServers设置了最小的空闲进程数,这样可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
l MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,apache会自动关闭这些多余进程,如果这个值设置的比小MinSpareServers,则Apache会自动把其调整为 MinSpareServers+1。
l MaxRequestsPerChild设置了每个子进程可处理的最大请求数,也就是一个进程能够提供的最大传输次数,当一个进程的请求超过此数目时,程序连接自动关闭。0意味着无限,即子进程永不销毁。这里我们设置为2000,已经基本能满足中小型网站的需要。
l MaxClients设定Apache可以同时处理的请求数目。是对Apache性能影响最大的参数,默认值150对于中小网站基本够了,但是对于大型网站,是远远不够的,如果请求总数已达到这个值,那么后面的请求就必须排队,这就是系统资源充足而网站访问却很慢的主要原因。理论上这个值设置的越大,可以处理的请求的越多,但是apache默认限制不能超过256,如果要设置的值大于256,可以直接使用ServerLimit指令加大MaxClients。这里我们设置的值是300。
相对于prefork,worker是全新的支持多线程和多进程的混合模型,由于是使用线程来处理请求,所以可以处理更多的请求,对系统资源的使用开销也比较小。
l MinSpareThreads设置了最少的空闲线程数。
l MaxSpareThreads设置了最多的空闲线程数。
l MaxClients设定同时连入客户端的最大数。如果现有子进程中的线程总数不能满足请求的负载,控制进程将派生出新的子进程。默认最大子进程数是16,加大时需要通过ServerLimit来进行声明,ServerLimit最大值为20000,注意,如果指定了ServerLimit,那么此值乘以ThreadsPerChild必须大于等于MaxClients,而MaxClients必须是ThreadsPerChild的整数倍,否则 Apache将会自动调节到一个相应值。
l 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目录下,这里这需指定加载即可。
……以下省略……
配置主服务器
User nobody
Group nobody
这里是设定执行httpd的用户和组,默认是nobody用户启动apache,这里将组也设置为nobody。
ServerAdmin you@example.com
这里指定的是网站管理员的邮件地址,如果apache出现问题,会发信到这个邮箱。
ServerName www.example.com:80
这里是指定系统的主机名,如果没有指定,会以系统的hostname为依据。特别注意,这里设定的主机名一定要能找到对应的IP地址(主机名和IP的对应关系可以在/etc/hosts设置)。
UseCanonicalName Off
设定是否使用标准的主机名,如果设置为On,则以ServerName指定的主机名为主。如果web主机有多个主机名,请设置为Off。
DocumentRoot "/usr/local/apache2/htdocs"
此指令非常重要,是用来放置网页的路径,apache会默认到这个路径下寻找网页,并显示在浏览器上。
<Directory />
#这里的“/”是相对路径,表示DocumentRoot指定的目录。
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/usr/local/apache2/htdocs">
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
上面这段信息是对DocumentRoot指定目录的权限设定,有3个必须知道的参数:
Options 表示在这个目录内能够执行的操作,主要有5个可设定的值:
l Indexes:此参数表示,如果在DocumentRoot指定目录下找不到以index打头的文件时,就将此目录下所有文件列出来,很不安全,不建议使用这个参数。
l FollowSymLinks:表示在DocumentRoot指定目录下允许符号链接到其它目录。
l ExecCGI:表示允许在DocumentRoot指定的目录下执行cgi操作。
l Includes:准许SSI(Server-side Includes)操作。
l MultiViews:不常用,根据语言的不同显示不通的信息提示。
AllowOverride 通过设定的值决定是否读取目录中的.htaccess文件,来改变原来所设置的权限,其实完全可以在httpd.conf中设置所有的权限,但是这样对apache使用者的其它用户如果要修改一些权限的话,就比较麻烦了,因此apache预设可以让用户以自己目录下的. htaccess文件复写权限,常用的选项有两个:
l All:表示可以读取.htaccess文件的内容,修改原来的访问权限。
l None:表示不读取.htaccess文件,权限统一控制。
Order 用来控制目录和文件的访问授权,常用的组合有2个:
l Deny,Allow:表示先检查禁止的设定,没有禁止的全部允许。
l Allow,Deny:表示先检查允许的设定,没有允许的全部禁止。
DirectoryIndex index.html index.htm index.jsp index.html.var
这里是对apache打开网站默认首页的设定,apache在打开网站首页时一般会查找index.*之类的网页文件,DirectoryIndex指令就是设置apache依次寻找能打开网站首页的顺序,例如我们要打开www.ixdba.net网站,apache会首先在DocumentRoot指定的目录下寻找index.html,也就是www.ixdba.net/index.html,如果没有找到index.html网页,那么apache会接着查找index.htm,如果找到就执行www.ixdba.net/index.htm打开首页,以此类推。
亿恩科技地址(ADD):郑州市黄河路129号天一大厦608室 邮编(ZIP):450008 传真(FAX):0371-60123888
联系:亿恩小凡
QQ:89317007
电话:0371-63322206
本文出自:亿恩科技【www.enkj.com】
服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]
|