Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源代码的网页服务器,可以在大多数电脑操作系统中运行,由于其跨平台和安全性。被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
其程序包是httpd:
[root@www ~]# rpm -qa httpd
httpd-2.2.15-39.el6.centos.x86_64
httpd是yum安装或者是rpm包安装的话,主配置文件会默认保存在/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf为主配置文件的辅助性配置文件
下面来介绍一下httpd的程序的主配置文件重要的一些部分:
httpd.conf配置文件由三部分组成:
全局环境
主服务器配置
虚拟主机
一.全局环境
### Section 1: Global Environment
1.服务程序根目录:指出服务器保存其配置、出错和日志文件等的根目录。
ServerRoot "/etc/httpd"
2.PID文件存放路径:相对路径
PidFile run/httpd.pid
3、开启或关闭持续连接:
KeepAlive {On|Off}
4.持续连接最大连接数
MaxKeepAliveRequests 50 #最大连接数50
5.持续连接超时时间
KeepAliveTimeout 15 #超时时间为15s,单位默认为s
6.针对MPM的设置,为多道处理模块
## Server-Pool Size Regulation (MPM specific)
prefork:一个进程响应一个请求,稳定可靠,任何进程崩溃了,不会影响另外一个进程,尤其并发量很大时对资源消耗比较大,尤其涉及到大量的进程切换;worker:一个进程生成多个线程,一个线程响应一个请求
event:一个进程同时响应多个请求,但不会生成线程
注:对于worker模式:启动多个进程,每个进程生成多个线程,对于thread由于多个线程共享同一个进程资源,所以某个线程打开某一个文件并进行了访问的话,那么第二个线程就不用再打开了,直接访问就可以了;这样效率会高一些;但是多个线程在工作时写一个资源的话会导致资源争用,所以为了避免资源竞争,必须要加锁,因此不能良好的解决锁竞争的话,事实上线程是不是比进程的效率更高,这个很难说,尤其是Linux并不是原生态支持线程的,这也是为什么默认使用prefork而不使用worker的原因。
http -l #查看编译进内核的模块
如果向使用不同的MPM,直接修改文件/etc/sysconfig/httpd文件中的HTTPD项即可
#HTTPD=/usr/sbin/httpd.worker
preforck模块:
<IfModule preforck.c> 判断模块是否存在
StartServers 默认启动的工作进程数
MinSpareServers 最少空闲进程数
MaxSpareServers 最大空闲进程数
ServerLimit 最大活动进程数
MaxClients 最大并发连接数,最多允许发起的连接请求个数
MaxRequestsPerChild 每个子进程在生命周期内最大允许服务的请求个数
</IfModule>
实例:
<IfModule prefork.c>StartServers 8MinSpareServers 5MaxSpareServers 20ServerLimit 256MaxClients 256MaxRequestsPerChild 4000</IfModule>
worker模块:
<IfModule worker.c>
StartServers 默认启动的工作进程数
MaxClients 最大并发连接数
MinSpareThreads 最少空闲线程数
MaxSpareThreads 最多空闲线程数
ThreadsPerChild 每个自己进程生成的线程数
MaxRequestsPerChild 每个子进程在生命周期内最大允许服务的请求个数
</IfModule>
实例:
<IfModule worker.c>StartServers 4MaxClients 300MinSpareThreads 25MaxSpareThreads 75 ThreadsPerChild 25MaxRequestsPerChild 0</IfModule>
7、监听套接字
Listen [IP:]port
此指令可以出现多次,用于指定监听多个不同的套接字,IP地址可以省略,如果IP地址省略则表示监听在本机所有的ip地址上
Listen 172.16.31.5:80
Listen 8080
8.DOS模块的加载方式,动态模块
# Dynamic Shared Object (DSO) Support
LoadModule module_name /path/to/module
可以使用绝对路径,也可以使用相对路径,如果使用相对路径,则是相对于ServerRoot所定义的位置而言的
httpd -m #列出所有已加载的DOS模块与非DOS模块
实例:
LoadModule auth_basic_module modules/mod_auth_basic.so
二.主服务器配置
### Section 2: 'Main' server configuration
1.主服务器管理员邮箱
ServerAdmin root@localhost
2.主服务器名称
#ServerName www.example.com:80
3.配置站点根目录
DocumentRoot /path/to/somewhere
只能使用绝对路径
#DocumentRoot "/var/www/html"
4.页面访问属性
<Direcotry "/path/to/somewhere">
Options 选项
Indexes:缺少指定的默认主页时,允许将目录中的所有文件以列表形式返回给用户,危险:慎用
FollowsymLinks:允许跟随符号链接所指向的岁暗示文件
None:所有的都不启用
All: 所有的都启用
ExecCGI: 允许使用mod_cgi模块执行CGI脚本
Includes: 允许mod_include模块实现服务器端包含
IncludesNOEXEC:允许包含但不允许执行CGI脚本
MultiViews:允许使用mod_negotication实现内容协商
SymLinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号连接所指向的原始文件
</Direcotry>
默认:
<Directory /> Options FollowSymLinks AllowOverride None</Directory>
5.针对主服务器根目录的配置
# This should be changed to whatever you set DocumentRoot to.
基于主机的访问控制(2.2系列的配置)
<Direcotry "/path/to/somewhere">
Options
AllowOverride
None 不禁用下面选项
Order 次序,写在后面的为默认
allow,deny: 没有允许的都拒绝
deny,allow:没有拒绝的都允许
Allow from 允许通过的主机
Deny from 拒绝通过的主机
可以是单独的ip地址,也可以是一个网段
172.16.0
172.16.0.0
172.16.0.0/24
172.16.0.0/255.255.255.0
表示的都为172.16.0网段
</Direcotry>
如果都匹配或都不匹配时则以默认的为准,否则以匹配到的为准
6.定义默认主页面
DirectoryIndex
查询顺序为依次查询
DirectoryIndex index.html index.html.var
7.错误日志位置
ErrorLog logs/error_log
8.错误日志记录级别
LogLevel warn
9.配置日志功能
CustomLog logs/access_log combined
access.log 访问日志,其需要记录的内容需要自定义
error.log 错误日志,
访问日志:
CustomLog "/path/to/log_file" LogFormat
LofFormat定义的日志格式,只解释最常用的一种
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
%h: 客户端地址
%l:远程的登陆名,通常为-
%u: 认证时的远程用户名,通常为-
%t: 接收到的请求时的时间,为标准英文格式时间+时区
\":表示转义,显示"
%r:请求报文的起始行
%>s: 响应状态码
%b:以字节响应报文的长度,不包含头报文
%{Referer}i:记录指定请求报文首部的内容
%{User-Agent}i:用户使用的工具
详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
10.路径别名
Alias /alias/ "/path/to/somewhere"
意味着访问http://Server_IP/alias时,其页面文件来自于/path/to/somewhere中
实例;
Alias /icons/ "/var/www/icons/"
11.指定默认的字符集
AddDefaultCharset
实例:
AddDefaultCharset UTF-8
12.脚本路径别名(CGI接口)
CGI:Common Gateway Interface(通用网关接口)使web可以跟一个应用程序进行通信,从通信环境中获得结果,前提必须加载mod_alias和mod_cgi模块
一般在第一行写入 echo “Content-Type:text/html”
ScriptAlias /URL/ "/path/to/somewhere" somewhere下的文件可以被执行
格式一般为
cat << EOF
Content-Type:text/html
<pre>
The Time is : `date`
</pre>
EOF
13.基于用户的访问控制
虚拟用户:不是系统上的用户,只是为了获取某种特定的资源烈性的一种虚拟用户
可以基于文件、SQL数据库、DBM、ldap认证
认证类型(auth)
basic:基本认证,账号和密码以明文发送
digest:摘要认证,hash编号以后再发送
认证提供者(authentiation provide):账号和密码的存放位置
授权机制(authorization):根据什么进行授权
案例:基于文件,做基本认证根据用户和组进行授权
1、编辑配置文件,为需要认证的目录配置认证机制
<Directory "/server-status">
options None
AllowOverride AuthConfig 使用认证配置
AuthType Basic 使用基本认证
AuthName "Private Area" 质询时标题
AuthUserFile /etc/http/conf/.htpasswd 密码的存放位置
Require user tom jerry |Require valid-user 可访问的用户
</Directory>
注:
Require valid-user #运行帐号文件中的所有用户访问
Require user tom #仅允许指定用户登录
2、使用htpsswdm命令使用生成认证库
htpasswd
-c 创建密码,创建第一个用户时使用
htpasswd -c -m /etc/http/conf/.htpasswd tom
-m MD5格式存放
-b 批量模式
-D 删除用户
3、基于组认证
<Directory "/server-status">
options None
AllowOverride AuthConfig 使用认证配置
AuthType Basic 使用基本认证
AuthName "Private Area" 质询时标题
AuthgroupFile /etc/http/conf/.htpasswd 密码的存放位置
Require group GroupName 可访问的用户
</Directory>
先创建用户,在创建组
组文件:
组文件:每一行定义一个组
格式:
GROUP:user1 user2 user3
三.虚拟主机
### Section 3: Virtual Hosts
如果开启虚拟主机就需要开启:
NameVirtualHost *:80
一个物理服务器提供多个站点;使用虚拟要先取消中心主机
注意:先注释或取消Main Server;注释DocumentRoot指令即可
基于不同的IP实现不同的虚拟主机:变化IP
基于不同的port实现不同的虚拟主机:变化port
基于不同的主机名实现不同的虚拟主机:变化ServerName的值
通过请求报文中的HOST来实现不同的虚拟主机的访问
<VirtualHost IP:port>
SeverName #主机名
DocumentRoot "" #服务器目录
<Directory "">
</Directory>
ServerAlias #配置别名
ServerAdmin #管理邮箱
</VirtualHost>
虚拟主机可以单独配置用户认证、访问日志、错误日志、别名、脚本别名等
基于主机名的实例:
<VirtualHost IP:80>
DocumentRoot /var/www1
ServerName www.test.com
ServerAlias web.test.com
ServerAlias test.com
ErrorLog logs
CustomLog "/var/log/httpd/access_test.log" combind
</VirtualHost>
<VirtualHost IP:80>
DocumentRoot /var/www2
ServerName www.oracle.com
ErrorLog logs
CustomLog "/var/log/httpd/access_oracle.log" combind
</VirtualHost>
本文出自 “飞雪连天射白鹿” 博客,请务必保留此出处http://sohudrgon.blog.51cto.com/3088108/1589775