Lamp之-Apache服务生产实战应用指南(02.apache配置说明)
1.apache的目录结构
bin build cgi-bin conf error htdocs icons include lib logs man manual modules
[root@c601 apache]# tree /application/apache/bin/
/application/apache/bin/ #<--apache的命令目录
├── ab
#Apache HTTP服务器性能测试工具,简单易用。同类软件还有jmeter、loadrunner、webbench等。
├── apachectl #这是apache的启动命令,需重点掌握,apachectl是一个脚本,详细说明见附录。
├── apr-1-config
├── apu-1-config
├── apxs #apxs是一个为apache HTTP服务器编译和安装扩展模块的工具,在进行DOS方式编译时会用到,后文
在编译php软件时就用到了此命令,如:--with-apx2=/application/apache/bin/apxs。
├── checkgid
├── dbmmanage
├── envvars
├── envvars-std
├── htcacheclean #这是清理磁盘缓冲区的命令,需要在编译时指定相关参数才可以使用。一般用的很少。
├── htdbm
├── htdigest
├── htpasswd #建立和更新基本认证文件,如:配置nagios等监控服务时会用到。
├── httpd #http为apache的控制命令程序,apachectl执行时会调用httpd。
├── httxt2dbm
├── logresolve
└── rotatelogs #为apache自带的日志轮询命令,也还可以使用,但在工作场景习惯由cronlog替代之。
[root@c601 apache]# tree -L 1 /application/apache/conf/ <--apache配置文件目录
/application/apache/conf/ #这是apache所有配置文件的目录,极其重要。
├── extra #这是额外的apache配置文件目录,这个目录里的文件我们会经常访问修改,如:http-vhosts.con默认就在此目录
├── httpd.conf #apache的主配置文件,这个文件我们会经常访问修改,其每一行的参数作用都应该弄清楚明白。
├── magic
├── mime.types
└── original
[root@c601 apache]# tree -L 1 htdocs/
htdocs/ #这个是编译安装的默认的站点目录。
├── index.html #默认的首页文件。在实际环境中,大家习惯用index.html、index.php、index.jsp作为网站的首页文件。
首页文件是在httpd.conf中事先定义好的。具体的参数为:Directoryindex index.html
[root@c601 apache]# tree -L 1 logs/
logs/ #这是apache的日志目录
├── access_log #这个是apache的默认的访问日志。使用tail -f access_log查看日志。
├── cgisock.27173
├── error_log #这个是apache的错误日志。
└── httpd.pid #用来存放apache的主进程号。
[root@c601 apache]# ps -ef|grep httpd|grep -v grep|grep root
root 27173 1 0 19:08 ? 00:00:00 /application/apache2.2.34/bin/httpd -k start
[root@c601 apache]# tree -L 1 modules/
modules/ #用来存放apache的模块目录
└── httpd.exp
2.1apache主配置文件httpd.conf说明 39:30
[root@c601 conf]# egrep -v "^.*#|^$" httpd.conf
ServerRoot "/application/apache2.2.34" #apache的根目录,应只能root访问,一般不需要更高此配置。
Listen 80 #apache监听的端口,默认为80端口,如果同时监听91端口可以增加一行如:Listen 91
User daemon #apache的用户。默认为daemon,建议修改,如:baizuo。
Group daemon #apache的用户组。默认为daemon,建议修改,如:baizuo。
ServerAdmin
[email protected] #系统管理员邮箱。非常重要选项。当网站出现问题时,页面会显示此邮箱地址。
DocumentRoot "/application/apache2.2.34/htdocs" #apache的默认web站点目录路径,结尾不要添加斜线。
#这将禁止访问的文件系统所在目录,并添加你希望允许访问的目录块。
Options FollowSymLinks #FollowSymLinks表示允许使用符号链接,没添加的选项表示禁用。
AllowOverride None #表示禁止用户对目录配置重载,普通站点目录此项建议不开。
Order deny,allow #以deny方式优先处理,没有明确拒绝的话都将通过,即允许未被明确拒绝的访问。
Deny from all #明确所指,拒绝所有访问。
62-68行为默认apache站点的限制配置,如果读者私自配置了站点而没配置这里就会出现403错误。
#设置了/application/apache2.2.34/htdocs目录块权限
Options Indexes FollowSymLinks #FollowSymLinks表示禁止使用符号链接, Indexes表示允许目录浏览。
这很危险应改为 Options -Indexes FollowSymLinks或者 Options FollowSymLinks取消目录浏览功能。
AllowOverride None #表示禁止用户对目录配置文件(.htaccess进行修改)重载,不建议开启,有时开发在这里会有需求,
一般禁止,由SA来控制这里。
Order allow,deny #以allow优先处理,没有明确说明允许的话都将拒绝访问,即拒绝未被明确允许的访问。
Allow from all #允许所有访问,因为是提供给所有人web访问服务器,所以权限要放开。
DirectoryIndex index.html #默认的apache首页文件。如果虚拟主机没有此配置,默认应用在这里配置。
首页的配置文件可以有多个,每个文件使用空格分开。
#防止.htaccess和.htpasswd等重要隐藏文件被web用户看到。
Order allow,deny
Deny from all
Satisfy All
ErrorLog "logs/error_log" #错误日志路径为logs为apache安装目录的相对路径,遇到apache错误记得要查看此文件。
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined #访问日志格式
LogFormat "%h %l %u %t \"%r\" %>s %b" common #普通访问日志格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
CustomLog "logs/access_log" common #默认站点访问日志配置
ScriptAlias /cgi-bin/ "/application/apache2.2.34/cgi-bin/" #配置cgi别名,ScriptAlias方法可学习。
AllowOverride None
Options None
Order allow,deny
Allow from all
DefaultType text/plain #DefaultType定义当不能确定MIME类型时服务器提供的默认MIME类型。
RequestHeader unset Proxy early
TypesConfig conf/mime.types
AddType application/x-compress .Z #AddEncoding允许你在信息传送中使用(Mosaic/X 2.1+)解压缩信息。
注意:不是所有浏览器都支持这个选项。
AddType application/x-gzip .gz .tgz
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
2.2 apache扩展配置说明
apache的扩展配置文件是通过httpd.conf主配置文件中的Include命令实现的,不过在默认情况是注释状态。
摘录了httpd.conf主配置文件中部分include行,如下所示。
# Virtual hosts
#Include conf/extra/httpd-vhosts.con #取消注释即可使用扩展虚拟主机配置
2.2.1 通过tree命令查看extra目录下扩展配置文件
[root@c601 conf]# tree -L 1 extra/
extra/
├── httpd-autoindex.conf
├── httpd-dav.conf #dab支持配置
├── httpd-default.conf #配置的是apache的相关服务参数:超时时间,保持连接时间等。
├── httpd-info.conf
├── httpd-languages.conf #语言支持配置
├── httpd-manual.conf
├── httpd-mpm.conf #服务器池管理,即优化apache的配置文件,选择apache的模式及配置连接数。worker/prefork模式。
├── httpd-multilang-errordoc.conf
├── httpd-ssl.conf #提供apache SSL支持配置文件
├── httpd-userdir.conf
└── httpd-vhosts.conf #虚拟机配置文件
2.2.2 apache虚拟主机的配置
通过执行命令,去掉httpd-vhosts.conf的虚拟主机配置文件中的注释及空行后的配置如下:
[root@c601 conf]# egrep -v "^#|^$" extra/httpd-vhosts.conf
NameVirtualHost *:80
#这里表示使用基于名称的虚拟机主机配置,这是产品环境下最常用的配置。*:80中的*表示监听本机所有IP地址,
80表示在80端口上提供http服务。如果*改为具体IP,就是表示监听本机指定的IP地址的服务请求。
#定义一个虚拟主机,监听本机所有的IP地址,80端口上提供http服务请求。
ServerAdmin [email protected]
#这里可以配置管理员的信箱。如[email protected]。
DocumentRoot "/application/apache2.2.34/docs/dummy-host.example.com"
#提供服务的程序目录,也称为站点目录。
ServerName dummy-host.example.com
#这里配置提供服务的域名,如www.baidu.com,如果是生产环境需要把www.baidu.com解析到服务器上配置的外网VIP或IP上,
如果是测试,也可在本机上做hosts解析。
ServerAlias www.dummy-host.example.com
ErrorLog "logs/dummy-host.example.com-error_log"
#这里可以配置错误apache日志路径,错误日志是调试apache的一个非常重要的日志。有什么错误信息一般这里都会老老实实的告诉你。
CustomLog "logs/dummy-host.example.com-access_log" common
#访问日志配置,生产环境用,一般用combined格式替代common格式,以获取更多的日志格式输出。
#这是虚拟主机的结尾,如果还要配置新的虚拟主机,则可以再增加
。
ServerAdmin [email protected]
DocumentRoot "/application/apache2.2.34/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error_log"
CustomLog "logs/dummy-host2.example.com-access_log" common