(在apache2.2中不支持event模型的,在红帽httpd2.2中默认使用的是prefork的模型,比较稳定,我们这里针对红帽版本进行讲解)
用httpd -l命令可以查看当前服务器支持哪种核心模型
- [root@www ~]# httpd -l
- Compiled in modules:
- core.c
- prefork.c
- http_core.c
- mod_so.c
如果更换模型,可以将/etc/sysconfig/httpd文件中默认的模型选项启动,选择你想用的模型就可以了。
#HTTPD=/usr/sbin/httpd.worker如果更换模型,可以将/etc/sysconfig/httpd文件中默认的模型选项启动,选择你想用的模型就可以了。
#HTTPD=/usr/sbin/httpd.worker
这里定义了prefork和worker各自不同模型配置的属性
- prefork:
- <IfModule prefork.c> #如果启用prefork模块
- StartServers 8 #服务器开启时启动多少个进程
- MinSpareServers 5 #最少空闲进程数
- MaxSpareServers 20 #最大空闲进程数
- ServerLimit 256 #服务器限制请求数(为MaxClient指定最大上限)
- MaxClients 256 #最多允许多少个请求同时连进来
- MaxRequestsPerChild 4000 #一个进程最多响应多少次的请求
- </IfModule>
- 这些值都可以根据实际情况进行调整的
- <IfModule worker.c> #如果启用worker模型
- StartServers 2 #开启时启动的进程数
- MaxClients 150 #最多客户端请求数
- MinSpareThreads 25 #最少空闲的线程数
- MaxSpareThreads 75 #最多空闲的线程数
- ThreadsPerChild 25 #每个进程生成多少个线程数
- MaxRequestsPerChild 0 #每个进程响应多少个请求,(这个是由线程决定的,0表示不作限定)
- </IfModule>
三、可以变更的选项、
Listen 80
#服务器监听的端口号(也可以指定地址)
#指定apache在启动的时候装载的模块
模块
模块名称
模块路径(如果不想要的话,注释掉即可)
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
……………………………………………………………………
……………………………………………………………………
Include conf.d/*.conf
#这是主配置文件的从配置文件,隶属于主配置文件的一部分
User apache
#apache 的worker模型默认是普通用户登录的(这里指定了普通用户)
Group apache #指定默认组
ServerAdmin root@localhost
#管理员的邮件地址
#ServerName www.example.com:80
#服务器名称,不启用的话开启服务器时它回去反向解析当前的ip地址到某个主机名,解析成功就把那个主机名当做服务器名字,所以最好给本地主机一个主机名。
(虚拟主机上这个是必须的)
DocumentRoot "/var/www/html"
#网页文档所在的路径(可以更改)
四、网页访问控制的设置选项:
<Directory />
#可以解释为容器,在这里可以定义网页的访问属性
Options FollowSymLinks
AllowOverride None
</Directory>
在这个配置中,主要有下面几个选项:
Options:用来定义区块的内容
主要选项:
ExecCGI: 在该目录下允许执行CGI脚本。
FollowSymLinks: 在该目录下允许文件系统使用符号连接。
Indexes: 当用户访问该目录时,如果用户找不到DirectoryIndex指定的主页文件(例如index.html),则返回该目录下的文件列表给用户。
SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。
Muliyiview:多视图,可以根据你的客户端的语言来源提供相匹配的网页给你。
Includes:允许执行服务器端包含。
None:不支持任何选项
All:支持所有选项
AllowOverride 指的是允许覆盖,覆盖之后的内容,之后的内容是定义服务器的访问控制列表的,指允许谁能够访问和不能够访问。
Order: 用于定义访问顺序,后可以跟ip、网络地址或者主机
Allow: 允许客户端访问
Deny:拒绝客户端访问
AuthConfig:定义用户提供账号密码来进行访问该网页(下面会有例子的哦)
<Directory "/var/www/html">
#默认网页的路径,在这里定义该网页的访问控制机制
Options Indexes FollowSymLinks
#有索引,可以使用符号链接
AllowOverride None
#指不允许覆盖,以目录自己的权限为主。
Order allow,deny
#定义允许和拒绝的次序
Allow from all
#允许所有客户端访问
</Directory>
五、日志记录及定义别名:
ErrorLog logs/error_log
#定义错误日志
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 "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
%h: 客户端地址
%l:远端主机上的登陆名称
%u:登陆网站的时候用户的名称
%t:日志事件产生的时间
%r:请求报文的第一行
\:表示转义
%>s:最近一次请求的状态码
%b:响应报文的大小
%{Referer}i:当前页面来源于哪个页面
%{User-Agent}i:浏览器的来源
(具体可以参考下帮助文档哦)
#CustomLog logs/access_log common
#通用访问日志
CustomLog logs/access_log combined
#混合访问日志
定义别名:
Alias /icons/ "/var/www/icons/"
#即访问/icons 页面时会自动访问到/var/www/icons中的页面
<Directory "/var/www/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all #这里定义了访问控制
</Directory>
六、定义虚拟主机:
#NameVirtualHost *:80 #指定虚拟主机名或地址和端口(和下面定义虚拟主机的名称或地址保持一致)
eg:NameVirtualHost 172.16.62.1:80
虚拟主机的格式:
定义虚拟主机:
<VirtualHost [IP:PORT]>
DocumentRoot "/path" #主页文件在哪
ServerName
#服务器名称
<Directory "/path">
#在此定义文件访问控制
</Directory>
ErrorLog logs/site1.err_log
#定义日志路径
CustomLog logs/site1.access_log combined
</VirtualHost>
虚拟主机有三种
基于IP的虚拟主机:使用不同的ip提供不同的站点(主机由多个ip地址)
基于port的虚拟主机:使用不同的port提供不同的站点
基于主机名(域名)的虚拟主机:使用不同的主机名提供不同的站点
ServerName 不同,在主配置文件中要将NameVirtualHost 启用,和下面定义的虚拟主机的地址端口务必要保持一致。
下面以一个例子来讲解下基于ssl的用户认证和虚拟主机的配置。。
例如:建立httpd服务器,分别为www.magedu.com, www.test.net, www.example.org各提供一个虚拟主机,位置分别为:/vhosts/magedu, /vhosts/test, /vhosts/example;要求:
1)每个虚拟主机的要使用各自的错误日志和访问日志,日志文件名称以虚拟主机名称打头;三个虚拟主机的日志文件都位于/vhosts/logs目录中;
2)www.magedu.com虚拟主机仅允许来自172.16.0.0/16(除了172.16.100.0/24)的主机访问,且支持基于SSL的访问;
3)www.test.org虚拟主机仅允许提供了帐号和密码的请求者访问
解析过程:
定义虚拟主机,首先要把中心主机注释掉
#DocumentRoot "/var/www/html"
可以在主配置文件中末尾添加如下内容:(我的主机ip为172.16.62.1)
- <VirtualHost 172.16.62.1:80>
- ServerName www.magedu.com
- DocumentRoot "/vhosts/magedu"
- </VirtualHost>
- <VirtualHost 172.16.62.1:80>
- ServerName www.test.net
- DocumentRoot "/vhosts/test"
- </VirtualHost>
- <VirtualHost 172.16.62.1:80>
- ServerName www.example.org
- DocumentRoot "/vhosts/example"
- </VirtualHost>
在各相应目录下新建一个html文档,里面写下相应内容,
修改/etc/hosts文件添加如下三行:
- vim /etc/hosts
- 172.16.62.1 www.magedu.com
- 172.16.62.1 www.test.net
- 172.16.62.1 www.example.org
启动httpd服务(启动之前确保selinux是关闭状态)
然后通过不同主机就可以进行访问了。
三个虚拟主机配置完成。。
1),在各个虚拟机中定义日志:添加如下内容
- ErrorLog /vhosts/logs/magedu.error_log
- CustomLog /vhosts/logs/magedu.access_log common
- 下面两个虚拟机日志文件将magedu替换成为test和example即可。
2)、在magedu虚拟机中添加:
- <Directory "/vhosts/magedu">
- Order deny,allow
- Deny from 172.16.100.0/24
- Allow from 172.16.0.0/16
- </Directory>
基于ssl访问,服务器端通过给客户端进行颁发私有证书来实现。
(私有证书的创建及颁发前面文章有详细介绍,这里只给出相关步骤)
颁发证书方:
- # vim /etc/pki/tls/openssl.cnf
- # dir=/etc/pki/CA
- 在这里还可以修改一些默认选项
-
- # cd /etc/pki/CA
- # make certs newcerts crl
- # touch index.txt
- # touch serial
- # echo 01 > serial
-
- 生成自签署证书:
- # (umask 077; openssl genrsa -out private/cakey.pem 2048)
- # openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 3650
申请方:
- # cd /etc/httpd/
- # mkdir ssl
- # cd ssl
- # (umask 077; openssl genrsa 1024 > httpd.key)
- # openssl req -new -key httpd.key -out httpd.csr
签署证书:
输入你所设置的用户名和密码就可以进行访问了.......