一、常用配置
1、修改监听的IP和Port
Listen[IP:]PORT 省略ip表示监听本机所有IP;Listen可重复出现多次;
2、持久连接
PersistentConnection:
连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成;
如何断开?
数量限制:100
时间限制:可配置
副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应;
折衷:使用较短的持久连接时间;
httpd-2.4支持毫秒级持久时间;
非持久连接
KeepAlive {On|Off} #默认为关闭
MaxKeepAliveRequests #
KeepAliveTimeout #
测试:
telnetHOSTPORT
GET/URLHTTP/1.1
Host:HOSTNAMEorIP
3、MPM参数
MultipathProcessModule:多道处理模块
prefork,worker,event
<IfModule prefork.c> StartServers 8 #服务启动时启动的子进程数 MinSpareServers 5 #最少空闲子进程数 MaxSpareServers 20 ServerLimit 256 #同时启动的子进程数上限 MaxClients 256 #同时服务的客户端数上限(支持的并发数上限) MaxRequestsPerChild 4000 #每个子进程在其生命周期内处理的请求数上限 </IfModule> <IfModule worker.c> StartServers 4 #服务启动时启动的子进程数 MaxClients 300 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 #每个子进程可启动的线程数 MaxRequestsPerChild 0 #每个子进程可处理的请求数,0表示无限制 </IfModule>
4、DSO
配置指令实现模块加载 LoadModule <mod_name> <mod_path> #要卸载某个模块直接将其注释掉即可,不用重读配置文件就可立即生效;模块路径为相对于ServerRoot而言的路径 显示DSO动态装载的模块: # httpd -D DUMP_MODULES Loaded Modules: core_module (static) mpm_prefork_module (static) http_module (static) so_module (static) auth_basic_module (shared) auth_digest_module (shared) authn_file_module (shared) authn_alias_module (shared) ... # httpd -l Compiled in modules: core.c prefork.c http_core.c mod_so.c # httpd.worker -l Compiled in modules: core.c worker.c http_core.c mod_so.c
5、定义‘Main‘server的文档页面路径
DocumentRoot "/path/to/somefile" 文档路径映射: DocumentRoot 指向的路径为URL路径的起始位置; DocumentRoot "/var/www/html" #默认为这个位置 test/index.html-->http://HOST:PORT/test/index.html
6、站点访问控制
可基于两种类型的路径指明对哪些资源进行访问控制
文件系统路径: <Directory "/path/to/somewhere"> ... </Direcotry> <File [~] "/path/to/somewhere"> ... </File> 基于URL访问路径做访问控制: <Location""> ... </Location> #另外,路径可做模式匹配,但若非迫不得已不建议使用 #如果即能使用Diretoory控制,也能使用Location控制,建议使用Directory
7、Directory中“基于来源地址”实现访问控制
(1)Options 所有可用特性:Indexes,Includes,FollowSymLinks,SymLinksifOwnerMatch ExecCGI,MultiViews,None,All Indexes:索引;在无默认主页面又无欢迎页时,将所有资源以列表形式呈现给用户。 危险,慎用;在选项前添加减号即为禁用。如-Indexes FollowSymlinks:允许跟踪符号链接文件; # vim /etc/httpd/conf/httpd.conf <Directory "/www/html"> Options Indexes FollowSymLinks #默认是开启的 AllowOverride None Order allow,deny Allow from all </Directory> (2)AllowOverride 支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能; .htaccess文件会影响httpd的性能 (3)基于IP做访问控制机制 Order:检查次序 Order allow,deny Allow form 192.168.10.0/24 form后面能够接受的地址格式: IP,Network Address 网络地址格式较为灵活: 172.16 172.16.0.0 172.16.0.0/16 172.16.0.0/255.255.0.0
8、定义默认主页面
DirecotryIndex index.htm lindex.html.var
9、日志设定
ErrorLog "/path/to/error_log" #错误日志,路径为相对于ServerRoot而言的路径 LogLevel {debug|info|notice|warn|error|crit|alert|emerg} 指定级别及比其更高级别的信息都会被记录 LogFormat 格式 格式名 %h: 客户端地址 %l: 远程登录名,通常为- %u: 认证时输入用户名,没有认证时为- %t: 服务器收到 用户请求时的时间 %r:请求报名的起始行 %>s: 响应状态码 %b: 响应报文的长度,单位是字节 %{HEADER_NAME}i: 记录指定首部对应的值 例如 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined #格式中若要使用引号则要使用反斜线转义 CustomLog "/path/to/access_log" LogFormat_Name
10、路径别名
实现URL路径的映射,从而所访问的资源不再依赖于站点根目录。
Alias /URL/ "/path/to/somewhere/"
例如 Alias /images/ "/www/tupian/" #后面映射的路径是绝对路径,而不是相对于站点根目录而言的路径;此时若站点根目录(以/var/www/html为例)下也有一个images目录,那么将无法访问/var/www/html/images中的资源,因为images已被别名征用
# mkdir test hello # cat test/a.html aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa # cat hello/b.html bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # vim /etc/httpd/conf/httpd.conf Alias /test/ "/www/html/hello/" # service httpd restart 停止 httpd: [确定] 正在启动 httpd: [确定] # curl http://localhost/test/a.html <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL /test/a.html was not found on this server.</p> <hr> <address>Apache/2.2.15 (CentOS) Server at localhost Port 80</address> </body></html> # curl http://localhost/test/b.html bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
11、设定默认字符集
AddDefaultCharset UTF-8 字符集:GBK,GB2312,GB18030
12、基于用户的访问控制
用户认证类型: 基本认证:Basic,明文发送 摘要认证:digest 虚拟用户:仅用于访问某服务或获取某资源的凭证; 账号和密码的存储机制: 文本文件:.htpasswd SQL数据库 dbm:数据库引擎,提供API ldap: 案例:基于文件做访问控制 (1)基于用户进行认证 <Directory /> Options none AllowOverride AuthConfig AuthType Basic AuthName "admin area" AuthBasicProvider file AuthUserFile /etc/httpd/conf/.htpasswd Require valid-user </Directory> # Require valid-user:文件中所有用户均可访问 # Require user USERNAME,... 指定用户访问 (2)提供认证文件 htpasswd [option] passwdfile username 选项: -c:创建一个passwdfile,如果passwdfile已经存在,那么它会重新写入并删除原有内容 -m:以md5的格式编码存储用户的密码信息 -s:sha1加密用户密码; -D:删除指定用户 (3)基于组认证 <Directory /> Options none AllowOverride AuthConfig AuthType Basic AuthName "admin area" AuthBasicProvider file AuthUserFile /etc/httpd/conf/.htpasswd AuthGroupFile /etc/httpd/conf/.htgroup Require group GROUP_NAME </Directory> 组文件(.htgroup)格式 组名:user1 user2 user3 例如: # cd /var/www/html # mkdir admin # cat admin/admin.html The user is admin. # vim /etc/httpd/conf/httpd.conf <Directory "/var/www/html/admin"> Options none AllowOverride AuthConfig AuthType Basic AuthName "admin area" AuthBasicProvider file AuthUserFile /etc/httpd/conf/.htpasswd Require valid-user </Directory> # htpasswd -c -m /etc/httpd/conf/.htpasswd bjwf #创建第一个用户时必须创建文件 New password: Re-type new password: Adding password for user bjwf # htpasswd -m /etc/httpd/conf/.htpasswd tom #创建第二个用户 New password: Re-type new password: Adding password for user tom # service httpd restart
13、虚拟主机
有三种实现方案: 基于ip:为每个虚拟主机准备至少一个ip地址; 基于port:为每个虚拟主机准备至少一个专用port;实践中很少使用; 基于hostname:为每个虚拟主机准备至少一个专用hostname; 可混合使用上述三种方式中任意方式; 注意:一般虚拟主机莫与中心主机混用,所以,要使用虚拟主机,先禁用中心主机; 禁用中心主机:注释DocumentRoot 每个虚拟主机都有专用配置: <VirtualHost"IP:PORT"> SeverName DocumentRoot"" </VirtualHost> ServerAlias:虚拟主机的别名; ErrorLog CustomLog <Directory""> </Directory> 示例1:基于ip <VirtualHost172.16.100.6:80> ServerName web1.magedu.com DocumentRoot"/vhosts/web1/htdocs" </VirtualHost> <VirtualHost172.16.100.7:80> ServerName web2.magedu.com DocumentRoot "/vhosts/web2/htdocs" </VirtualHost> 示例2:基于port <VirtualHost172.16.100.7:80> ServerNameweb2.magedu.com DocumentRoot"/vhosts/web2/htdocs" </VirtualHost> <VirtualHost 172.16.100.7:8080> ServerName web3.magedu.com DocumentRoot "/vhosts/web3/htdocs" </VirtualHost> 示例3:基于hostname <VirtualHost 172.16.100.6:80> ServerName web1.magedu.com DocumentRoot "/vhosts/web1/htdocs" </VirtualHost> <VirtualHost 172.16.100.6:80> ServerName web2.magedu.com DocumentRoot "/vhosts/web2/htdocs" </VirtualHost> <VirtualHost 172.16.100.6:80> ServerName web3.magedu.com DocumentRoot "/vhosts/web3/htdocs" </VirtualHost>
示例:
# mkdir /var/www/html/{a.com,b.net,c.org} -pv mkdir: 已创建目录 "/var/www/html/a.com" mkdir: 已创建目录 "/var/www/html/b.net" mkdir: 已创建目录 "/var/www/html/c.org" # echo a.com > /var/www/html/a.com/index.html # echo b.net > /var/www/html/b.net/index.html # echo c.org > /var/www/html/c.org/index.html
14、内置的status页面
<Location/server-status>
SetHandlerserver-status
Orderdeny,allow
Denyfromall
Allowfrom172.16
</Location>
实现:基于账号实现访问控制