本篇博文为Linux网站架构系列之apache的第二篇,我将带大家一起学习apache的编译参数,目录结构和配置文件等方面的知识,实现对apache服务的进一步掌握,并使之能更好的应用到生产实战中去。
一、编译参数
在上篇的apache部署中,我们用了大量的编译参数,其实apache的编译参数并不止这些,这些只是我们生产环境中常用的。我们在apache的源码包目录下,用以下命令可以将他们都输出出来
1.
[root@c64-web httpd-2.4.6]
# ./configure --help
此命令的输出这里就不贴出来了,一大堆呢,估计你也不看,有些参数一百年也用不到一次。如果想了解这些参数,你可以百度一下。
这里我将详细为大家说明一下我们常用的编译参数的作用
01.
--prefix=/usr/
local
/apache-2.4.6 \
#表示指定apache安装路径为/application/apache2.2.25。如果不指定安装路径,则默认路径为/usr/local/apache2
02.
--with-apr=/usr/
local
/apr \
#指定apr安装路径,不然会报错
03.
--with-apr-util=/usr/
local
/apr-util \
#指定apr-util安装路径,不然会报错
04.
--with-pcre \
#支持perl的正则表达式,不然会报错
05.
--
enable
-so \
#激活apache服务的DSO(全称Dynamic Shared Object,动态共享对象)支持,即在以后可以以DSO的方式编译安装共享模块,这个模块本身不能以DSO方式编译。
06.
--
enable
-ssl \
#基于ssl加密传输
07.
--
enable
-cgi \
#开启CGI脚本
08.
--
enable
-rewrite \
# 提供基于URL规则的重写功能。即根据已知URL地址,转换其它想要的URL地址。如前文讲解的伪静态功能就是这个模块实现的。这是apache生产环境中必用的一个重要功能。
09.
--with-zlib \
#支持压缩
10.
--
enable
-deflate \
# 提供对内容的压缩传输编码支持,一般html,js,css等内容的站点,使用此参数功能会大大提高传输速度,提升访问者访问体验。在生产环境中,这是apache调优的一个重要选项之一。
11.
--
enable
-expires \
# 激活允许通过配置文件控制HTTP的“Expires:”和“Cache-Control:”头内容,即对网站图片、js、css等内容,提供在客户端游览器缓存的设置。这是apache调优的一个重要选项之一。
12.
--
enable
-headers \
#提供允许对HTTP请求头的控制
13.
--
enable
-modules=most \
#支持大多数模块
14.
--
enable
-mpms-shared=all \
#mpm模块的动态切换
15.
--with-mpm=worker
#选择apache mpm的模式为worker模式。因worker模式原理是更多的使用线程来处理请求,所以可以处理更多的并发请求,而系统资源的开销小于基于进程的MPM prefork。如果不指定此参数,默认的模式是prefork进程模式。这两者的关系,在调优篇里面我会详细为大家讲解。
二、apache目录结构介绍
熟悉apache的目录结构,对我们对apache知识点的理解和掌握尤为重要,下面我将带大家一起来对apache的目录结构进行了解。
01.
[root@c64-web /]
# tree -L 3 /usr/local/apache/ #以下我对输出做了精简,仅保留常用的
02.
./
03.
├── bin
#存放apache命令的目录,如apache启动命令apachectl
04.
├── ab
#apache http服务器性能测试工具,简单、易用。同类软件还有jmeter、loadrunner、webbench等
05.
├── apachectl
#apache的启动程序,需重点掌握,apachectl是一个脚本
06.
├── apxs
#apxs是一个为apache HTTP服务器编译和安装扩展模块的工具,在进行DSO方式模块编译时会用到。后面在编译php软件时就用到了这个命令,如:--with-apxs2=/application/apache/bin/apxs
07.
├── htcacheclean
#这是清理磁盘缓冲区的命令,需要在编译时指定相关参数才可使用,一般用的很少。
08.
├── htpasswd
#建立和更新基本认证文件,如:配置nagios等监控服务时会用到。
09.
├── httpd
#httpd为apache的控制命令程序,apachectl执行时会调用httpd
10.
└── rotatelogs
#apache自带的日志轮询工具,也还可以用,但在老师工作场景中习惯由cronolog替代之
11.
├── build
12.
├── cgi-bin
13.
├── conf
#这是apache的所有的配置文件的目录,极其重要
14.
├── extra
#这是额外的apache配置文件目录,这个目录里的文件我们会经常访问修改
15.
├── httpd-dav.conf
#dav支持配置
16.
├── httpd-default.conf
#这个文件里配置的是apache的相关服务参数:超时时间,保持连接时间等。
17.
├── httpd-languages.conf
#语言支持配置
18.
├── httpd-mpm.conf
#服务器池管理,也就是优化apache的一个配置文件,如:选择apache的模式及配置连接数等,常用的模式有worker模式和profork模式,默认情况是profork模式。
19.
├── httpd-ssl.conf
#这是apache SSL支持配置文件
20.
└── httpd-vhosts.conf
#这是虚拟主机的配置文件
21.
└── httpd.conf
#apache的主配置文件,这个文件我们会经常访问修改,其每一行的参数作用都应弄清楚明白
22.
├── htdocs
#这是编译安装时apache的默认站点目录,前面已说明。
23.
└── index.html
#默认的首页文件,在实际环境中,大家习惯用index.html、index.php、index.<a href="http://www.it165.net/pro/webjsp/" target="_blank" class="keylink">jsp</a>来做首页文件,首页文件名字是在httpd.conf中事先定义好的。具体参数:Directoryindex index.html
24.
├── logs
#存放apache默认的日志路径,包括错误日志及访日志问
25.
├── access_log
#这是apache的默认访问日志文件。
26.
├── error_log
#这是apache的错误日志文件,如果apache出现启动故障等问题,一定要看看这个错误日志。
27.
└── httpd.pid
#httpd的pid文件,httpd进程启动后,会把所有进程的ID号写到此文件。
28.
└── modules
#apache的模块目录,比如php.memcache等模块编译后都在这里。
以上就是apache的目录结构说明了,大家了解一下知道做什么用就可以了。
三、apache主配置文件详解
下面我将为大家详细介绍apache的主配置文件,我们通过下面的命令将apache默认开启的行筛选出来
01.
[root@c64-web /]
# egrep -v "^$|#" /usr/local/apache/conf/httpd.conf|cat -n
02.
1 ServerRoot
"/usr/local/apache-2.4.6"
#apache的根目录,应只能root访问,一般不需要更改此配置
03.
2 Listen 80
#apache监听的端口,默认为80端口,如果同时监听81可以增加一行,如 Listen 81
04.
3 LoadModule authn_file_module modules/mod_authn_file.so
05.
4 LoadModule authn_core_module modules/mod_authn_core.so
06.
5 LoadModule authz_host_module modules/mod_authz_host.so
07.
6 LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
08.
7 LoadModule authz_user_module modules/mod_authz_user.so
09.
8 LoadModule authz_core_module modules/mod_authz_core.so
10.
9 LoadModule access_compat_module modules/mod_access_compat.so
11.
10 LoadModule auth_basic_module modules/mod_auth_basic.so
12.
11 LoadModule reqtimeout_module modules/mod_reqtimeout.so
13.
12 LoadModule filter_module modules/mod_filter.so
14.
13 LoadModule mime_module modules/mod_mime.so
15.
14 LoadModule log_config_module modules/mod_log_config.so
16.
15 LoadModule env_module modules/mod_env.so
17.
16 LoadModule headers_module modules/mod_headers.so
18.
17 LoadModule setenvif_module modules/mod_setenvif.so
19.
18 LoadModule version_module modules/mod_version.so
20.
19 LoadModule mpm_worker_module modules/mod_mpm_worker.so
21.
20 LoadModule unixd_module modules/mod_unixd.so
22.
21 LoadModule status_module modules/mod_status.so
23.
22 LoadModule autoindex_module modules/mod_autoindex.so
24.
23 LoadModule dir_module modules/mod_dir.so
25.
24 LoadModule alias_module modules/mod_alias.so
26.
25 &
lt
;IfModule unixd_module&
gt
;
27.
26 User daemon
#apache的用户,默认为daemon,建议修改为特定普通用户,如sunsky
28.
27 Group daemon
#apache的用户组,默认为daemon,建议修改为特定普通用户,如sunsky
29.
28 &
lt
;/IfModule&
gt
;
30.
29 ServerAdmin you@example.com
#系统管理员的邮箱
31.
30 &
lt
;Directory /&
gt
;
#这将禁止访问文件系统所在的目录,并添加你希望允许访问的目录块
32.
31 AllowOverride none
#表示禁止用户对目录配置文件(.htaccess进行修改)重载,普通站点目录此项建议不开
33.
32 Require all denied
#拒绝所有请求
34.
33 &
lt
;/Directory&
gt
;
35.
34 DocumentRoot
"/usr/local/apache-2.4.6/htdocs"
36.
35 &
lt
;Directory
"/usr/local/apache-2.4.6/htdocs"
&
gt
;
37.
36 Options Indexes FollowSymLinks
#允许目录游览和符号链接,生产环境默认这里为None一项也不打开
38.
37 AllowOverride None
#表示禁止用户对目录配置文件(.htaccess进行修改)重载,普通站点目录此项建议不开
39.
38 Require all granted
#授权所有请求
40.
39 &
lt
;/Directory&
gt
;
41.
40 &
lt
;IfModule dir_module&
gt
;
42.
41 DirectoryIndex index.html
#配置默认的apache首页文件,如虚拟主机没有此配置,默认应用这里的配置。首页文件可以有多个,每个文件用空格分开,调用时,前面优先匹配。
43.
42 &
lt
;/IfModule&
gt
;
44.
43 &
lt
;Files
".ht*"
&
gt
;
#防止.htaccess和.htpasswd等重要隐藏文件被web用户查看
45.
44 Require all denied
46.
45 &
lt
;/Files&
gt
;
47.
46 ErrorLog
"logs/error_log"
#错误日志路径,logs为apache安装目录的相对路径,遇到apache错误要记得查看此文件
48.
47 LogLevel warn
49.
48 &
lt
;IfModule log_config_module&
gt
;
50.
49 LogFormat
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
combined
#访问日志格式
51.
50 LogFormat
"%h %l %u %t \"%r\" %>s %b"
common
#普通访问日志格式
52.
51 &
lt
;IfModule logio_module&
gt
;
53.
52 LogFormat
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O"
combinedio
54.
53 &
lt
;/IfModule&
gt
;
55.
54 CustomLog
"logs/access_log"
common
#默认站点访问日志配置
56.
55 &
lt
;/IfModule&
gt
;
57.
56 &
lt
;IfModule alias_module&
gt
;
58.
57 ScriptAlias /cgi-bin/
"/usr/local/apache-2.4.6/cgi-bin/"
#配置cgi别名,ScriptAlias 方法可以学习。
59.
58 &
lt
;/IfModule&
gt
;
60.
59 &
lt
;IfModule cgid_module&
gt
;
61.
60 &
lt
;/IfModule&
gt
;
62.
61 &
lt
;Directory
"/usr/local/apache-2.4.6/cgi-bin"
&
gt
;
#允许cgi-bin路径访问
63.
62 AllowOverride None
64.
63 Options None
65.
64 Require all granted
66.
65 &
lt
;/Directory&
gt
;
67.
66 &
lt
;IfModule mime_module&
gt
;
68.
67 TypesConfig conf/mime.types
69.
68 AddType application/x-compress .Z
#AddEncoding允许你在信息传送中使用(Mosaic/X 2.1+)解压缩信息。不是所有游览器的支持这个选项。
70.
69 AddType application/x-
gzip
.gz .tgz
71.
70 &
lt
;/IfModule&
gt
;
72.
71 &
lt
;IfModule proxy_html_module&
gt
;
73.
72 Include conf/extra/proxy-html.conf
74.
73 &
lt
;/IfModule&
gt
;
75.
74 &
lt
;IfModule ssl_module&
gt
;
76.
75 SSLRandomSeed startup
builtin
77.
76 SSLRandomSeed connect
builtin
78.
77 &
lt
;/IfModule&
gt
;
以上是我们编译安装完成apache后,apache的默认主配置文件。其中有个别行暂时没有解开注释的,我会在用的时候给大家提到。
四、虚拟主机配置文件
生产环境中,我们通常都要用到apache的扩展文件中的虚拟主机配置文件,它位于apache安装目录下的conf/extra/httpd-vhost.conf。注意,如果要让该配置文件的内容起作用,我们需要解锁apache主配置文件httpd.conf中扩展虚拟主机的配置行
1.
[root@c64-web /]
# grep httpd-vhost /usr/local/apache/conf/httpd.conf
2.
#Include conf/extra/httpd-vhosts.conf #将此行解锁即可
此处我们可以用一键解锁命令
1.
[root@web apache]
# sed -i 's#\#Include conf/extra/httpd-vhosts.conf#Include conf/extra/httpd-vhosts.conf#g' /usr/local/apache/conf/httpd.conf #使用sed命令一键替换
2.
[root@web apache]
# grep httpd-vhost /usr/local/apache/conf/httpd.conf #查看替换结果
3.
Include conf/extra/httpd-vhosts.conf
现在开始为大家讲解httpd-vhost.conf这个文件,我们依旧只显示解开注释的行
01.
[root@c64-web apache]
# egrep -v "^$|#" /usr/local/apache/conf/extra/httpd-vhosts.conf|cat -n
02.
1 &
lt
;VirtualHost *:80&
gt
;
#定义一个虚拟主机,监听本机所有IP地址80端口上提供的http服务请求
03.
2 ServerAdmin webmaster@dummy-host.example.com
#这里可以配置管理员的邮箱
04.
3 DocumentRoot
"/usr/local/apache-2.4.6/docs/dummy-host.example.com"
#提供服务的程序目录,也称站点目录
05.
4 ServerName dummy-host.example.com
#这是配置提供服务的域名,如www.baidu.com,如果是生产环境需要把www.baidu.com解析到服务器上配置的外网VIP或IP上。如果仅为测试,可以直接在本机上做测试。
06.
5 ServerAlias www.dummy-host.example.com
#这是配置虚拟主机的别名,也就是可以配置多个域名访问同一站点,如此处配置baidu.com后,当输入baidu.com可以得到和www.baidu.com同样的结果。此功能需要apache mod_alias模块支持。
07.
6 ErrorLog
"logs/dummy-host.example.com-error_log"
#这里可以配置apache错误日志的路径。错误日志是调试apache的一个非常重要的日志。有什么错误信息这里一般都会有记录。
08.
7 CustomLog
"logs/dummy-host.example.com-access_log"
common
#访问日志配置。在生产环境中,我们一般用combined格式替代common格式,以获取更多的日志格式输出。
09.
8 &
lt
;/VirtualHost&
gt
;
#这是一个虚拟主机的结尾,如果需要添加新的虚拟主机,则可以增加<VirtualHost></VirtualHost>即可
10.
9
11.
10 ServerAdmin webmaster@dummy-host2.example.com
12.
11 DocumentRoot
"/usr/local/apache-2.4.6/docs/dummy-host2.example.com"
13.
12 ServerName dummy-host2.example.com
14.
13 ErrorLog
"logs/dummy-host2.example.com-error_log"
15.
14 CustomLog
"logs/dummy-host2.example.com-access_log"
common
16.
15 &
lt
;/VirtualHost&
gt
;
默认配置文件会准备出来两个虚拟主机模板,此处我们仅拿一个做讲解,两者内容是相通的。
到这里本篇博文就结束了,相信对于编译参数,apache目录结构,主配置文件和虚拟主机配置文件的内容,大家已经了然于心了。下一篇将是非常重要的针对生产环境的apache的调优介绍了。希望能帮助到大家。