8.3.1 Apache概述
8.3.2 实例—设置Apache服务器
实例8-5 使用GUI配置Apache服务器在GNOME桌面面板选择依次选择【系统】/【管理】/【服务器设置】/【HTTP】。也可以在终端窗口执行#system-config-httpd命令。
当配置工具界面(如图8-23所示)启动以后,可以遵循以下8个步骤进行配置。
在【主】选项卡中进行基本设置在【虚拟主机】选项卡中进行默认的设置在【服务器】选项卡中进行服务器配置在【性能】选项卡中进行连接等设置保存设置将所有必要的文件复制到DocumentRoot和cgi-bin目录下启动Apache
测试
实例8-6 认识Apache服务器的默认配置文件
Apache服务器的配置文件是httpd.conf,位于/etc/httpd/conf/目录下,对Apache服务器的配置其实就是对httpd.conf文件的修改,希望读者以后能够使用修改配置文件方法进行Apache服务器的配置,不要局限于GUI(图形用户界面)的配置操作。
/etc/httpd/conf/httpd.conf文件的原始内容如下:
### Section 1,Global Environment
ServerTokens OS //当服务器响应主机头信息时显示Apache的版本和操作系统的名称
ServerRoot "/etc/httpd" //设置服务器的根目录
PidFile run/httpd.pid //设置运行Apache时使用的PidFile的路径
#Timeout定义客户程序和服务器连接的超时间隔,超过这个时间间隔(秒)后
#服务器将断开与客户机的连接
Timeout 120
#建议设置为On,允许使用保持连接功能,这样就可以在一次连接中传递多个HTTP请求
KeepAlive Off
#在使用保持连接功能时,MaxKeepAliveRequests为一次连接可以进行的HTTP请求的
#最大请求次数。将其值设为0将支持在一次连接内进行无限次的传输请求。
#事实上没有客户程序在一次连接中请求太多的页面,通常达不到这个上限就完成连接了
MaxKeepAliveRequests 100
#在使用保持连接功能时,KeepAliveTimeout测试一次连接中的多次请求传输之间的时间,
#如果服务器已经完成了一次请求,但一直没有接收到客户程序的下一次请求,
#在时间间隔超过了这个参数设置的值之后,服务器就断开连接
KeepAliveTimeout 15
# Server-Pool Size Regulation (MPM specific)
#设置使用prefork.mpm运行方式的参数,此运行方式是RedHat的默认方式
<IfModule prefork.c>
StartServers 8 //设置服务器启动时运行的进程数
MinSpareServers 5 //Apache在运行时会根据负载的轻重自动调整空闲子进程的数目,若存在低于5个
//空闲子进程,就创建一个新的子进程准备为客户提供服务
MaxSpareServers 20 //若存在高于20个空闲子进程,就逐一删除子进程来提高系统性能
ServerLimit 256
MaxClients 256 //限制同一时间的连接数不能超过256
MaxRequestsPerChild 4000 //限制每一个子进程在结束处理请求之前能处理的连接请求为4000
</IfModule>
#设置使用worker MPM运行方式的参数
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
#设置服务器的监听端口号
#Listen 12.34.56.78:80
Listen 80
#动态加载模块(DSO)
# Dynamic Shared Object (DSO) Support
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
# Load config files from the config directory "/etc/httpd/conf.d".
Include conf.d/*.conf
# Apache服务器可以通过特殊的HTTP请求,来报告自身的运行状态,打开这个ExtendedStatus 参数
#可以让服务器报告更全面的运行状态信息
#ExtendedStatus On
#设置运行Apache服务器的用户和组
User apache
Group apache
### Section 2,'Main' server configuration
#
# The directives in this section set up the values used by the 'main'
# server,which responds to any requests that aren't handled by a
# <VirtualHost> definition,These values also provide defaults for
# any <VirtualHost> containers you may define later in the file.
#
# All of these directives may appear inside <VirtualHost> containers,
# in which case these default settings will be overridden for the
# virtual host being defined.
#
ServerAdmin root@localhost //设置Apache服务器管理员的E_mail地址
#缺省情况下,并不需要指定这个ServerName参数,服务器将自动通过名字解析过程来获得自己的名字,
#但如果服务器的名字解析有问题(通常为反向解析不正确),或者没有正式的DNS名字,也可以在这里
#指定IP地址。如果ServerName设置不正确,服务器将不能正常启动
# If your host doesn't have a registered DNS name,enter its IP address here.
# You will have to access it by its address anyway,and this will make
# redirections work in a sensible way.
#
#ServerName www.example.com:80
#若关闭此选项,当Apache服务器需要指向本身的连接使使用ServerName:port作为主机名,例如
# www.edu.cn:80若打开此选项,将使用www.edu.cn prot 80作为主机名
UseCanonicalName Off
#DocumentRoot定义这个服务器对外发布的超文本文档存放的路径,客户程序请求的URL就被映射为
#这个目录下的网页文件。这个目录下的子目录,以及使用符号链接指出的文件和目录都能被浏览器
#访问,只是要在URL上使用同样的相对目录名
DocumentRoot "/var/www/html"
#设置Apache服务器根的访问权限
#注意:Apache对一个目录的访问权限的设置能够被下一级目录继承
<Directory />
# Apache在目录的访问控制中提供了 FollowSymLinks选项来打开或关闭支持符号链接的特性。
#符号链接虽然逻辑上位于本目录之下,但实际上可以位于计算机上的任意目录中,因此可以
#使客户程序能访问那些根文档目录之外的目录,在增加了灵活性的同时降低了系统的安全性
Options FollowSymLinks
AllowOverride None //禁止读取.htaccess配置文件的内容
</Directory>
#设置根文档目录的访问权限
<Directory "/var/www/html">
# Indexes:若在目录中找不到DirectoryIndex到表中指定的文件就生成当前的文件列表
# FollowSymLinks:允许符号链接,可以访问不在根文档目录下的文件
Options Indexes FollowSymLinks
# Apache服务器可以针对目录进行文档的访问控制,然而访问控制可以通过两种方式来实现,
#一个是在配置文件httpd.conf中针对每个目录进行设置,另一个方法是在每个目录下设置
#访问控制文件,通常访问控制文件名字为.htaccess。虽然使用这两个方式都能用于控制浏览器
#的访问,但是使用配置文件的方法要求每次修改后要重启Apache服务器,因此该方法主要用于
#配置服务器系统的整体安全控制策略,而使用每个目录下的.htaccess文件设置具体目录的
#访问控制更为灵活方便
AllowOverride None //禁止读取.htassess配置文件的内容
Order allow,deny //指定先执行Allow(允许)访问规则,再执行Deny(拒绝)访问规则
Allow from all //设置Allow (允许) 访问规则,允许所有连接
</Directory>
#为每个用户进行服务器的配置
<IfModule mod_userdir.c>
UserDir disable //不允许为每个用户进行服务器的配置
#UserDir public_html
</IfModule>
# Control access to UserDir directories,The following is an example
# for a site where these directories are restricted to read-only.
#
#<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# <Limit GET POST OPTIONS>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS>
# Order deny,allow
# Deny from all
# </LimitExcept>
#</Directory>
#一般情况下,访问某个网站时,URL中并没有指定网页文件名,而只是给出了一个目录名或网址,
# Apache服务器就自动返回这个目录下由DirectoryIndex定义的文件。在这个目录下可以指定多个
#文件名,系统会根据指定顺序搜索,当所有由DirectoryIndex指定的文件都不存在时,Apache服务器
#可以根据系统设置,生成这个目录下的所有文件列表,提供用户选择。此时该目录的访问控制选项
#中的Indexes选项(Options Indexes )必须打开,以使得服务器能够生成目录列表,否则将拒绝访问。
#当访问服务器时,依次查找页面index.html、index.html.var
DirectoryIndex index.html index.html.var
#定义每个目录下的访问控制文件的文件名,缺省为.htaccess,可以通过更改这个文件来改变
#不同目录的访问控制限制
AccessFileName,htaccess
#拒绝访问以.ht开头的文件,保证.htaccess文件不被访问
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
#指定负责处理MIME对应格式的配置文件的存放位置
TypesConfig /etc/mime.types
#如果Web服务器不能决定一个文档的缺省类型(这通常表示文档使用了非标准的后缀),那么服务器
#就使用DefaultType定义的MIME类型将文档发送给客户浏览器。这里的设置为text/plain,这样设置的问
#题是,如果服务器不能判断出文档的 MIME,那么大部分情况下这个文档为一个二进制文档,但使用
#text/plain格式发送回去,浏览器将在内部打开它而不会提示保存。因此建议将这个设置更改为
#application/octet-stream,这样浏览器将提示用户进行保存
DefaultType text/plain //指定默认的MIME文件类型为纯文本或HTML文件
#当mod_mime_magic.c模快被加载时,指定Magic信息码配置文件的存放位置
<IfModule mod_mime_magic.c>
# MIMEMagicFile /usr/share/magic.mime
MIMEMagicFile conf/magic
</IfModule>
#只记录连接Apache 服务器的ip地址,而不记录主机名
HostnameLookups Off
#指定错误日志存放位置
ErrorLog logs/error_log
LogLevel warn //指定记录的错误信息的详细等级为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 "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
# "combinedio" includes actual counts of actual bytes received (%I) and sent (%O); this
# requires the mod_logio module to be loaded.
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
#指定访问日志的记录格式为combinded(混合型),并指定访问日志存放位置
CustomLog logs/access_log combined
ServerSignature On //设置Apache自己产生的页面中使用Apache 服务器版本的签名
Alias /icons/ "/var/www/icons/" //设置目录的访问别名
<Directory "/var/www/icons"> //设置/var/www/icons目录的访问权限
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
#指定DAV加锁数据库文件的存放位置
<IfModule mod_dav_fs.c>
# Location of the WebDAV lock database.
DAVLockDB /var/lib/dav/lockdb
</IfModule>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" //设置CGI目录的访问别名
<Directory "/var/www/cgi-bin"> //设置CGI目录的访问权限
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
#设置自动生成目录列表的显示方式
# fancyindexing:对每种类型的文件前加上一个小图标以示区别
# versiosort:对同一个软件的多个版本进行排序
# NameWidth=*:文件名域宽自动适应当前目录下最大之文件长度
IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable
#当使用indexOptions Fancyindexing以后,配置下面的参数,用于告知服务器在遇到不同的文件类型或扩展
#名时采用MIME编码格式,辨别文件类型并显示相应的图标
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
#当使用indexOptions Fancyindexing以后,配置下面的参数,用于告知服务器在遇到不同的文件类型或扩展
#名时采用MIME编码格式,采用所指定的格式.并显示相应的图标
AddIcon /icons/binary.gif,bin,exe
AddIcon /icons/binhex.gif,hqx
AddIcon /icons/tar.gif,tar
AddIcon /icons/world2.gif,wrl,wrl.gz,vrml,vrm,iv
AddIcon /icons/compressed.gif,Z,z,tgz,gz,zip
AddIcon /icons/a.gif,ps,ai,eps
AddIcon /icons/layout.gif,html,shtml,htm,pdf
AddIcon /icons/text.gif,txt
AddIcon /icons/c.gif,c
AddIcon /icons/p.gif,pl,py
AddIcon /icons/f.gif,for
AddIcon /icons/dvi.gif,dvi
AddIcon /icons/uuencoded.gif,uu
AddIcon /icons/script.gif,conf,sh,shar,csh,ksh,tcl
AddIcon /icons/tex.gif,tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif,.
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
#当使用indexOptions fancyindexing 之后,且无法识别文件类型时并显示此处定义的图标
DefaultIcon /icons/unknown.gif
#当服务器自动列出目录列表时,在所生成的页面之后显示REDME.html的内容
#当服务器自动列出目录列表时,在所生成的页面之前显示HEADER.html的内容
ReadmeName README.html
HeaderName HEADER.html
#
# IndexIgnore is a set of filenames which directory indexing should ignore
# and not include in the listing,Shell-style wildcarding is permitted.
#
IndexIgnore,* *~ *# HEADER* README* RCS CVS *,v *,t
#设置网页内容的语言种类(浏览器要启用内容协商)对中文网页,此项无实际意义
# Catalan (ca) - Croatian (hr) - Czech (cs) - Danish (da) - Dutch (nl)
# English (en) - Esperanto (eo) - Estonian (et) - French (fr) - German (de)
# Greek-Modern (el) - Hebrew (he) - Italian (it) - Japanese (ja)
# Korean (ko) - Luxembourgeois* (ltz) - Norwegian Nynorsk (nn)
# Norwegian (no) - Polish (pl) - Portugese (pt)
# Brazilian Portuguese (pt-BR) - Russian (ru) - Swedish (sv)
# Simplified Chinese (zh-CN) - Spanish (es) - Traditional Chinese (zh-TW)
#
AddLanguage ca,ca
AddLanguage cs,cz,cs
AddLanguage da,dk
AddLanguage de,de
AddLanguage el,el
AddLanguage en,en
AddLanguage eo,eo
AddLanguage es,es
AddLanguage et,et
AddLanguage fr,fr
AddLanguage he,he
AddLanguage hr,hr
AddLanguage it,it
AddLanguage ja,ja
AddLanguage ko,ko
AddLanguage ltz,ltz
AddLanguage nl,nl
AddLanguage nn,nn
AddLanguage no,no
AddLanguage pl,po
AddLanguage pt,pt
AddLanguage pt-BR,pt-br
AddLanguage ru,ru
AddLanguage sv,sv
AddLanguage zh-CN,zh-cn
AddLanguage zh-TW,zh-tw
#当启用内容协商时,设置语言的先后顺序
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
# Perfer:当有多种语言可以匹配时,使用LanguagePriority列表的第一项,Fallback:当没有语言可以匹
#配时,使用LanguagePriority列表的第一项
ForceLanguagePriority Prefer Fallback
AddDefaultCharset UTF-8 //设置默认字符集
#设置在线浏览用户可以实时解压缩.Z.gz.tgz类型的文件并非所有浏览器都支持
AddType application/x-compress,Z
AddType application/x-gzip,gz,tgz
AddHandler type-map var //设置Apache 对某些扩展名的处理方式
#使用过滤器执行SSI
# To parse,shtml files for server-side includes (SSI):
AddType text/html,shtml
AddOutputFilter INCLUDES,shtml
Alias /error/ "/var/www/error/" //设置错误页面目录的别名
<IfModule mod_negotiation.c> //设置/var/www/error目录的访问权限
<IfModule mod_include.c>
<Directory "/var/www/error">
AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
LanguagePriority en es de fr
ForceLanguagePriority Prefer Fallback
</Directory>
# ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var //设置错误输出页面
…… //省略
# ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
</IfModule>
</IfModule>
#设置浏览器匹配
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
#
# The following directive disables redirects on non-GET requests for
# a directory that does not include the trailing slash,This fixes a
# problem with Microsoft WebFolders which does not appropriately handle
# redirects for folders with DAV methods.
# Same deal with Apple's DAV filesystem and Gnome VFS support for DAV.
#
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
#
# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.
#
#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from,example.com
#</Location>
#
# Allow remote server configuration reports,with the URL of
# http://servername/server-info (requires that mod_info.c be loaded).
# Change the ".example.com" to match your domain to enable.
#
#<Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from,example.com
#</Location>
#
# Proxy Server directives,Uncomment the following lines to
# enable the proxy server:
#
#<IfModule mod_proxy.c>
#ProxyRequests On
#
#<Proxy *>
# Order deny,allow
# Deny from all
# Allow from,example.com
#</Proxy>
#
# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via,headers)
# Set to one of,Off | On | Full | Block
#
#ProxyVia On
#
# To enable a cache of proxied content,uncomment the following lines.
# See http://httpd.apache.org/docs/2.2/mod/mod_cache.html for more details.
#
#<IfModule mod_disk_cache.c>
# CacheEnable disk /
# CacheRoot "/var/cache/mod_proxy"
#</IfModule>
#
#</IfModule>
# End of proxy directives.
### Section 3,Virtual Hosts
#
# VirtualHost,If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them,Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses,This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#
# Use name-based virtual hosting.
#
#NameVirtualHost *:80
#
# NOTE,NameVirtualHost cannot be used without a port specifier
# (e.g.,80) if mod_ssl is being used,due to the nature of the
# SSL protocol.
#
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
实例8-7 为每个用户配置Web站点为每个用户配置Web站点,可以使得在安装了Apache服务器的本地计算机上,拥有有效用户帐号的每个用户,都能够架设自己单独的Web站点,配置步骤如下:
第1步:修改主配置文件/etc/httpd/conf/httpd.conf
按照如下设置对httpd.conf文件中的相应内容进行修改,保存httpd.conf文件,然后执行#service httpd restart命令重启Apache服务器。
<IfModule mod_userdir.c>
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
UserDir disable root //禁止root用户使用自己的个人站点,这主要是出于安全性考虑。
# To enable requests to /~user/ to serve the user's public_html
# directory,remove the "UserDir disable" line above,and uncomment
# the following line instead:
UserDir public_html //对每个用户Web站点目录的设置
</IfModule>
<Directory /home/*/public_html> //该小节用来设置每个用户Web站点目录的访问权限
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
第2步:为每个用户的Web站点目录配置访问控制以ztg用户为例,依次执行如下命令,前两条命令用于回到ztg用户的根目录,第3条命令(mkdir)创建public_html目录,第5条命令(chmod)修改ztg目录的权限,第6条命令返回root用户,第7条命令改变public_html目录的属性。
[root@localhost conf]# su ztg
[ztg@localhost conf]$ cd
[ztg@localhost ~]$ mkdir public_html
[ztg@localhost ~]$ cd,.
[ztg@localhost home]$ chmod 711 /home/ztg
[ztg@localhost home]$ exit
[root@localhost conf]# chcon -R -t httpd_sys_content_t /home/ztg/public_html/
将网页文件复制到/home/ztg/public_html/,
第3步:测试在浏览器的地址栏中,输入http://222.11.22.11/~ztg,即可访问用户ztg的个人网站。
 注意:
读者一定不要忘记修改ztg目录的权限,即:$chmod 711 ztg,若不执行这一命令,将会出现拒绝访问的错误提示。
修改了httpd.conf文件后,一定要重启Apache服务器。
实例8-8 配置基于IP的虚拟主机所谓虚拟主机就是指将一台机器虚拟成多台Web服务器。举个例子来说,一家公司想提供主机代管服务,它为其他企业提供Web服务。那么它肯定不是为每一家企业都各准备一台物理上的服务器,而是用一台功能较强大的大型服务器,然后用虚拟主机的形式,提供多个企业的Web服务,虽然所有的Web服务都是这台服务器提供的,但是让访问者看起来如同在不同的服务器上获得Web服务一样。可以利用虚拟主机服务将两个不同公司www1.test.edu.cn与www2.test.edu.cn的主页内容都存放在同一台主机上。而访问者只需输入公司的域名就可以访问到主页内容。
用Apache设置虚拟主机服务通常可以采用两种方案:基于IP地址的虚拟主机和基于域名的虚拟主机,【实例8-8】和【实例8-9】分别介绍他们的实现方法。
这两种配置方法都要使用VirtualHost容器,在默认httpd.conf文件中,为注释内容,如下所示,容器中有五条指令,作用见表8-11。
#<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
表 8-11 VirtualHost容器中指令的说明指令名称
作用
ServerAdmin
指定虚拟主机管理员的E-mail
DocumentRoot
指定虚拟主机的根文档目录
ServerName
指定虚拟主机的名称和端口号
ErrorLog
指定虚拟主机的错误日志存放路径
CustomLog
指定虚拟主机的访问日志存放路径
 注意:
每个虚拟主机都会从主服务器继承相关的配置,因此当使用IP地址或域名访问虚拟站点时,能够显示相应目录中的index.html主页内容。
这种方式需要在主机上设置IP别名,也就是在一台主机的网卡上绑定多个IP地址去为多个虚拟主机服务。
第1步:设置IP地址首先在一块网卡上帮定多个IP地址,执行如下命令即可。
[root@localhost conf]# ifconfig eth1:0 222.11.22.22 up
[root@localhost conf]# ifconfig eth1:1 222.11.22.33 up
第2步:创建虚拟主机目录执行如下命令在/var/www/目录中创建两个目录,分别为virtualhost_ip1和virtualhost_ip2,然后将网页文件分别复制到这两个目录中。
[root@localhost conf]# mkdir /var/www/virtualhost_ip1
[root@localhost conf]# mkdir /var/www/virtualhost_ip2
第3步:修改主配置文件httpd.conf
在httpd.conf文件末尾添加如下内容,保存httpd.conf文件,然后执行#service httpd restart命令重启Apache服务器。
<VirtualHost 222.11.22.22>
DocumentRoot /var/www/virtualhost_ip1
</VirtualHost>
<VirtualHost 222.11.22.33>
DocumentRoot /var/www/virtualhost_ip2
</VirtualHost>
第4步:测试在浏览器的地址栏中,输入http://222.11.22.22,即可访问虚拟主机virtualhost_ip1。
在浏览器的地址栏中,输入http://222.11.22.33,即可访问虚拟主机virtualhost_ip2。
实例8-9 配置基于域名的虚拟主机基于域名的虚拟主机,是比较适合使用的一种方案,因为它不需要更多的IP地址,而且配置简单,无须什么特殊的软硬件支持。多数Web服务器都支持这种虚拟主机的实现方法。
配置基于域名的虚拟主机的步骤如下:
第1步:配置DNS服务器修改/var/named/chroot/var/named/test.edu.cn.db文件,添加域名www1.test.edu.cn和www2.test.edu.cn,使这2个IP地址都指向222.11.22.11,具体配置过程请读者参看8.2节。
修改后的/var/named/chroot/var/named/test.edu.cn.db文件内容如下,保存test.edu.cn.db文件,然后执行#service named restart命令重启DNS服务器。
$TTL 1H
@ SOA dns.test.edu.cn root.test.edu.cn ( 2
3H
1H
1W
1H )
NS dns
dns IN A 192.168.0.5
www IN A 192.168.0.10
IN A 192.168.0.20
dns2 IN CNAME dns
www1 IN A 222.11.22.11
www2 IN A 222.11.22.11
第2步:创建虚拟主机目录执行如下命令在/var/www/目录中创建两个目录,分别为virtualhost_name1和virtualhost_name1,然后将网页文件分别复制到这两个目录中。
[root@localhost conf]# mkdir /var/www/virtualhost_name1
[root@localhost conf]# mkdir /var/www/virtualhost_name2
第3步:修改主配置文件httpd.conf
在httpd.conf文件末尾添加如下内容,保存httpd.conf文件,然后执行#service httpd restart命令重启Apache服务器。
NameVirtualHost *:80
#注意:添加下面三行是为了在设置虚拟主机后,还能够访问到原来的默认网站(/var/www/html)
<VirtualHost 222.11.22.11>
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/virtualhost_name1
ServerName www1.test.edu.cn
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/virtualhost_name2
ServerName www2.test.edu.cn
</VirtualHost>
第4步:测试在浏览器的地址栏中,输入http://www1.test.edu.cn,可访问虚拟主机virtualhost_ name1。
在浏览器的地址栏中,输入http://www2.test.edu.cn,可访问虚拟主机virtualhost_ name2。
在浏览器的地址栏中,输入http:// 222.11.22.11,即可访问原来的默认网站。
实例8-10 基于主机的授权
Apache服务器的管理员需要对一些关键信息进行保护,即只能是合法用户才能访问这些信息。Apache服务器提出了两种方法:一种是基于主机的授权,该方法在此任务中介绍;另一种是基于用户的认证,将在【实例8-11】中介绍。基于主机的授权通过修改httpd.conf文件即可完成。
基于主机的授权的操作步骤如下,
第1步:创建目录secret
执行如下命令在/var/www/html/目录中创建一个目录secret,然后将网页文件复制到这个目录中。
[root@localhost conf]# mkdir /var/www/html/secret
第2步:修改主配置文件httpd.conf
在httpd.conf文件末尾添加如下内容,保存httpd.conf文件,然后执行#service httpd restart命令重启Apache服务器。
<Directory "/var/www/html/secret">
Order deny,allow
Deny from 222.11.22.100
</Directory>
第3步:测试在IP地址为222.11.22.100的主机上访问该WWW服务器,在浏览器的地址栏中,输入http://222.11.22.11/secret,访问被拒绝,因为在第2步将该目录(secret)设置为不允许IP地址为222.11.22.100的主机访问。
读者可以对第2步的配置进行调整,要记着保存httpd.conf后,重启Apache服务器。
Allow,Deny,Order指令的使用说明见表8-12。
表8-12 Allow,Deny,Order指令的使用说明指令
作用
Order
指定执行允许访问规则和执行拒绝访问规则的先后顺序
Deny
定义拒绝访问列表
Allow
定义允许访问列表
Allow和Deny指令后面跟访问列表,访问列表的几种形式见表8-13。
表8-13 访问列表的几种形式选项
说明
All
表示所有客户
IP地址
指定完整的IP地址或部分IP地址
域名
表示域内的所有客户
网络/子网掩码
例如192.168.0.0/255.255.255.0
CIDR规范
例如192.168.0.0/24
Order指令的两种形式见表8-14。
表8-14 Order指令的两种形式指令举例
说明
Order Allow,Deny
先执行允许访问规则,再执行拒绝访问规则,默认情况下将会拒绝所有没有明确被允许的客户
Order Deny,Allow
先执行拒绝访问规则,再执行允许访问规则,默认情况下将会允许所有没有明确被拒绝的客户
 注意:
Allow,Deny和Deny,Allow之间不能有空格。
实例8-11 基于用户的认证对于安全性要求较高的场合,一般采用基于用户认证的方法,该方法与基于主机的授权方法有一定关系。当用户访问Apache服务器的某个目录时,会先根据httpd.conf文件中Directory小节的设置,来决定是否允许用户访问该目录。如果允许,还会继续查找该目录或其父目录中是否存在.htaccess文件,用来决定是否要对用户进行身份认证。基于用户的认证方法可以在httpd.conf文件中进行配置,也可以在.htaccess文件中进行配置,下面分别介绍他们的配置过程。
1.在主配置文件中配置认证和授权第1步:创建目录auth
执行如下命令在/var/www/html/目录中创建一个目录auth,然后将网页文件复制到这个目录中。
[root@localhost conf]# mkdir /var/www/html/auth
第2步:修改主配置文件httpd.conf
在httpd.conf文件末尾添加如下内容,保存httpd.conf文件,然后执行#service httpd restart命令重启Apache服务器。
<Directory "/var/www/html/auth">
//AllowOverride None的作用是不使用.htaccess文件,直接在httpd.conf文件中进行认证和授权的配置
AllowOverride None
AuthType Basic
AuthName "auth"
AuthUserFile /etc/httpd/conf/authpasswd
Require user auth me
</Directory>
第3步:创建Apache用户只有合法的Apache用户才能访问相应目录下的资源,Apache服务器软件包中有一个用于创建Apache用户的工具htpasswd,执行如下命令,添加了一个名为ztg的Apache用户。
[root@localhost conf]# htpasswd -c /etc/httpd/conf/authpasswd auth
htpasswd命令的参数“-c”,表示创建一个新的用户密码文件(authpasswd),这只是在添加第一个Apache用户时是必须的,此后再添加Apache用户或修改Apache用户密码时,就可以不加该参数了,按照此方法,再为Apache添加一个用户me。
[root@localhost conf]# htpasswd /etc/httpd/conf/authpasswd me
[root@localhost ~]# cat /etc/httpd/conf/authpasswd
auth:wje0O/.HVoyS6
me:EFYGRUPGV3iQY
[root@localhost ~]# chown apache.apache /etc/httpd/conf/authpasswd
第4步:测试在其他主机上访问该WWW服务器,在浏览器的地址栏中,输入http://222.11.22.11/auth,会弹出对话框,要求输入用户名和密码,输入合法的Apache 用户名和密码,单击【确定】按钮,如果用户名和密码是第3步创建的,那么就可访问相应的网页了。
2.在.htaccess文件中配置认证和授权
第1步:修改主配置文件httpd.conf
将前面第2步的设置修改为如下内容,保存httpd.conf文件,然后执行#service httpd restart命令重启Apache服务器。
<Directory "/var/www/html/auth">
//AllowOverride AuthConfig的作用是允许在.htaccess文件中使用认证和授权指令
AllowOverride AuthConfig
# AuthType Basic
# AuthName "auth"
# AuthUserFile /etc/httpd/conf/authpasswd
# Require user auth me
</Directory>
第2步:生成.htaccess文件在/var/www/html/auth目录中生成.htaccess文件,文件内容如下。
### /var/www/html/auth/.htaccess文件内容
AuthType Basic
AuthName "auth"
AuthUserFile /etc/httpd/conf/authpasswd
Require user auth me
第3步:测试在其他主机上访问该WWW服务器,在浏览器的地址栏中,输入http://222.11.22.11/auth进行测试。
 注意:
所有的认证配置指令即可以出现在主配置文件httpd.conf的Directory容器中,也可以出现在.htaccess文件中。该文件中常用的配置指令及其作用见表8-15。
表8-15,htaccess文件中常用的配置指令及其作用配置指令
作用
AuthName
指定认证区域名称,该名称是在提示对话框中显示给用户的
AuthType
指定认证类型
AuthUserFile
指定一个包含用户名和密码的文本文件
AuthGroupFile
指定包含用户组清单和这些组的成员清单的文本文件
Require
指定哪些用户或组能被授权访问
Require user ztg me只有用户ztg和me可以访问
Require group ztg 只有组ztg中成员可以访问
Require valid-user 在AuthUserFile指定文件中的任何用户都可以访问
实例8-12 组织和管理Web站点
1.符号链接在Apache的默认配置中,已经包含了符号链接的指令(Options FollowSymLinks),故只需在根文档目录下,依次执行如下命令创建符号链接即可。第1条命令是进入根文档目录,第2条命令用来创建符号链接。
[root@localhost ~]# cd /var/www/html
[root@localhost ~]# ln -s /home/ztg syslinks
在【实例8-9】的主配置文件httpd.conf的基础上,对httpd.conf文件中的相应内容进行修改,保存httpd.conf文件,然后执行#service httpd restart命令重启Apache服务器。
<VirtualHost 222.11.22.11>
Options Indexes FollowSymLinks //新添加的
DocumentRoot /var/www/html
</VirtualHost>
在客户端浏览器的地址栏中输入http://222.11.22.11/symlinks进行测试。
要点:只需在根文档目录下,使用#ln -s命令创建符号链接。
2.页面重定向第1步:在/var/www/html中创建两个目录years和years.old,然后再在years中创建目录spring,并且在spring 中创建网页文件。
在客户端浏览器的地址栏中,输入http://222.11.22.11/years/spring进行测试。
第2步:若到了夏季,spring被移到years.old中,则应修改httpd.conf文件,在文件尾加上Redirect 303 /years/spring http://222.11.22.11/years.old/spring,保存文件,重启Apache服务器。
再在在客户端浏览器的地址栏中,输入http://222.11.22.11/years/spring进行测试。
要点:要在httpd.conf文件尾加上重定向指令,如本例中的
Redirect 303 /years/spring http://222.11.22.11/years.old/spring
实例8-13 配置http中的ssl模块第1步:执行命令[root@localhost ~]#cd /etc/pki/tls/certs
第2步:执行如下命令,创建私钥
[root@localhost certs]# make server.key
第3步:执行如下命令,清除私钥密码
[root@localhost certs]# openssl rsa -in server.key -out server.key
第4步:执行如下命令,创建server.csr,CSR(Certificate Signing Request,证书签发请求)
[root@localhost certs]# make server.csr
第5步:执行如下命令,创建CA
[root@localhost certs]# openssl x509 -in server.csr -req -signkey server.key -days 365 -out server.crt
第6步:编辑/etc/httpd/conf.d/ssl.conf文件修改/etc/httpd/conf.d/ssl.conf文件中的如下两行。
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/certs/server.key
第7步:执行#service httpd restart命令,重启Apache服务器第8步:在浏览器的地址栏中输入https://222.11.22.11进行测试
8.3.3 实例—动态网站建设(见“论坛源码”文件夹)