Apache全解(六)_常见配置2

By | 2019年 11月 23日

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 | ofrequest,即表示请求报文的首行;记录了此次请求的"方法","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明文密码
-dCRYPT格式加密,默认
-mmd5格式加密
-ssha格式加密
-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>

注意:任意目录下的页面只有显式授权才能被访问
三种方式的虚拟主机可以混和使用

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注