Httpd 常见配置2
10、日志设定 |
参考帮助:http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats
- 日志类型:
访问日志:/etc/httpd/logs/access_log
错误日志:/etc/httpd/logs/error_log
- 错误日志配置:
LogLevel warn
#可选值: debug, info, notice, warn,error, crit, alert, emerg
- 访问日志配置:
定义日志格式
#%{xx}表示头信息
LogFormat "%h %l %u %{%F %T}t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" common|combined
- 使用日志格式:
CustomLog logs/access_log testlog
格式 | 说明 |
---|---|
%h | 客户端IP地址 |
%l | 远程用户,启用mod_ident才有效,通常为减号"-" |
%u | 验证(basic,digest)远程用户,非登录访问时,为一个减号"-" |
%t | 服务器收到请求时的时间 |
%r | First | line | of | request,即表示请求报文的首行;记录了此次请求的"方法","URL"以及协议版本 |
%>s | 响应状态码 |
%b | 响应报文的大小,单位是字节;不包括响应报文http首部 |
%{Referer}i | 请求报文中首部"referer"的值;即从哪个页面中的超链接跳转至当前页面的 |
%{User-Agent}i | 请求报文中首部"User-Agent"的值;即发出请求的应用程序 |
11、设定默认字符集 |
AddDefaultCharset UTF-8 此为默认值
中文字符集:GBK, GB2312, GB18030
12、定义路径别名 |
格式:Alias /URL/ "/PATH/"
#普通写法
DocumentRoot "/www/htdocs"
http://www.magedu.com/download/bash.rpm
==>/www/htdocs/download/bash.rpm
#别名写法
Alias /download/ "/rpms/pub/"
http://www.magedu.com/download/bash.rpm
==>/rpms/pub/bash.rpm
13、基于用户的访问控制 |
- 认证质询:WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码
- 认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源
- 认证方式两种:
basic:明文
digest:消息摘要认证,兼容性差 - 安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因
- 用户的账号和密码
- 虚拟账号:仅用于访问某服务时用到的认证标识
- 存储:文本文件,SQL数据库,ldap目录存储,nis等
一、basic认证配置示例:
(1) 定义安全域
<Directory "/path">
Options None
AllowOverride None
AuthType Basic
AuthName "String" #
AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" #认证文件的路径
Require user username1 username2 ...
#允许账号文件中的所有用户登录访问:Require valid-user
</Directory>
(2) 提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
[options] | 说明 |
---|---|
-c | 自动创建文件,仅应该在文件不存在时使用 |
-p | 明文密码 |
-d | CRYPT格式加密,默认 |
-m | md5格式加密 |
-s | sha格式加密 |
-D | 删除指定用户 |
二、基于组账号进行认证
(1) 定义安全域
<Directory "/path">
AuthType Basic
AuthName "String"
AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"
AuthGroupFile "/PATH/HTTPD_GROUP_FILE"
Require group grpname1 grpname2 ...
</Directory>
(2) 创建用户账号和组账号文件
#组文件:每一行定义一个组
GRP_NAME: username1 username2 ...
示例:
<Directory "/www/htdocs/admin">
Options None
AllowOverride None
AuthType Basic
AuthName "Administator private"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
AuthGroupFile "/etc/httpd/conf.d/.htgroup"
Require group webadmins
</Directory>
[centos]
$ vim /etc/httpd/conf.d/.htgroup webadmins:wang chen
三、远程客户端和用户验证的控制
Satisfy ALL|Any
#ALL 客户机IP和用户验证都需要通过才可以
#Any 客户机IP和用户验证,有一个满足即可
示例:
Require valid-user
<RequireAll>
Require all granted
Require not ip 172.16.1.1
</RequireAll>
Satisfy Any
14、实现用户家目录的http共享 |
基于模块mod_userdir.so实现
相关设置:
vim /etc/httpd/conf.d/userdir.conf
<IfModule mod_userdir.c>
#UserDir disabled
UserDir public_html #指定共享目录的名称
</IfModule>
#授权
<Directory "/home/wang/public_html">
require all granted
</Directory>
准备目录
su – wang
mkdir /home/wang/public_html
setfacl –m u:apache:x /home/wang
访问
http://localhost/~wang
15、ServerSignature On | Off | EMail |
当客户请求的网页并不存在时,服务器将产生错误文档,如果打开了 ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息,如果不对外显示这些信息,就可以将这个参数设置为Off
设置为Email,将显示ServerAdmin 的Email提示
16、status页面 |
LoadModule status_module modules/mod_status.so
SetHandler server-status
ExtendedStatus On #显示扩展信息
17、虚拟主机 |
站点标识: socket
(1)IP相同,但端口不同
(2)IP不同,但端口均为默认端口
(3)FQDN不同: 请求报文中首部 Host: www.magedu.com
有三种实现方案:
(1)基于port:为每个虚拟主机使用至少一个独立的port
(2)基于ip:为每个虚拟主机准备至少一个ip地址
(3)基于FQDN:为每个虚拟主机使用至少一个FQDN
虚拟主机的配置方法:
<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot "/path"
</VirtualHost>
建议:上述配置存放在独立的配置文件中
其它可用指令:
ServerAlias:虚拟主机的别名;可多次使用
ErrorLog: 错误日志
CustomLog:访问日志
基于IP的虚拟主机示例:
<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.7:80>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.8:80>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>
基于端口的虚拟主机:
listen 808
listen 8080
<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.6:808>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.6:8080>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>
基于FQDN虚拟主机
基于FQDN的虚拟主机不再需要NameVirutalHost指令
<VirtualHost *:80>
ServerName www.b.net
DocumentRoot "/apps/b.net/htdocs"
<Directory "/apps/b.net/htdocs">
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
注意:任意目录下的页面只有显式授权才能被访问
三种方式的虚拟主机可以混和使用