文章目录
httpd 的设置 二
1. 日志的设置
1.1 日志类型:
- 访问日志
- 错误日志
1.2 日志的设置
-
错误日志:ErrorLog
默认设置
ErrorLog "logs/error_log"(日志的相对位置) LogLevel warn (日志记录的级别)
LogLevel 可选值: debug, info, notice, warn,error, crit, alert, emerg
-
访问日志
-
日志的格式
在 中定义了 日志的记录格式 logformat,默认的 两种comon 和combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common
使用日志格式,指定格式名字即可
CustomLog "logs/access_log" combined
-
日志格式中的参数
参考帮助: http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats
- %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”的值;即发出请求的应用程序”
-
2. 定义路径别名
格式:Alias /URL/ “/PATH/”
例子:
当用户访问 192.168.0.3/aa 时,我给他跳转到 /data/bbs 目录
[root@node1 asite]# mkdir /data/bbs -p
[root@node1 asite]# echo "this 103:/data/bbs" > /data/bbs/index.html
[root@node1 asite]# systemctl restart httpd
conf
alias /aa "/data/bbs/"
<directory "/data/bbs">
Require all granted
</directory>
测试
[root@node1 asite]# curl 192.168.0.3/aa/
this 103:/data/bbs
3.基于用户的访问控制
和认证相关的概念:
-
认证质询:WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码
-
认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源
-
认证方式两种:
- basic:明文
- digest:消息摘要认证,兼容性差
-
安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因
-
用户的账号和密码
- 虚拟账号:仅用于访问某服务时用到的认证标识
- 存储账号和密码的方式:文本文件,SQL数据库,ldap目录存储,nis等
basic认证配置示例:
环境要求:
安装auth_basic 模块
[root@node1 asite]# httpd -M |grep auth_basic
auth_basic_module (shared)
(1) 定义安全域
<Directory /data/html/rz> 哪个目录需要加密
Options None
AllowOverride None
AuthType Basic
AuthName "rzPage" 此处效果”让你输入认证前的提示信息“ 不同的浏览器看到的效果可能不一样
AuthUserFile "/etc/httpd/conf.d/.huser" 密码文件路径
Require user alice tom 哪个用户可以访问
</Directory>
若允许账号文件中的所有用户登录访问:Require valid-user
(2) 提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
- -c 自动创建文件,仅应该在文件不存在时使用
- -p 明文密码
- -d CRYPT格式加密,默认
- -m md5格式加密
- -s sha格式加密
- -D 删除指定用户
例:
[root@node1 ~]# htpasswd -c /etc/httpd/conf.d/.huser bob
New password:
Re-type new password:
Adding password for user bob
[root@node1 ~]# htpasswd /etc/httpd/conf.d/.huser alice
New password:
Re-type new password:
Adding password for user alice
重启服务器就可以,验证
4、基于组账号进行认证
(1) 定义安全域
<Directory “/data/html/rz2">
AuthType Basic
AuthName "String“
AuthUserFile "/etc/httpd/conf.d/.huser"
AuthGroupFile "/etc/httpd/conf.d/.hgroup"
Require group male
</Directory>
(2) 创建用户账号和组账号文件
组文件:每一行定义一个组
格式 GRP_NAME: username1 username2 …
例子:
[root@node1 ~]# cat /etc/httpd/conf.d/.hgroup
male: bob tom
female : alice rose
验证:只有male 组可以访问
5. 启用status页面
1、环境要求:装载 status_module (shared) 模块
2、conf 配置
<requireany>
require all denied
require ip 192.168.37.0/24
</requireany>
</Location>
验证:http://192.168.0.3/status/
6、虚拟主机设置
虚拟主机的实现依赖站点标识
- IP相同,但端口不同
- IP不同,但端口均为默认端口
- FQDN不同:请求报文中首部 Host: www.magedu.com
有三种实现方案:
- 基于ip:为每个虚拟主机准备至少一个ip地址
- 基于port:为每个虚拟主机使用至少一个独立的port
- 基于FQDN:为每个虚拟主机使用至少一个FQDN
6.1 基于IP的多虚拟主机
conf
<virtualhost 192.168.0.3:80>
documentroot /data/asite
CustomLog "logs/asite_access_log" combined
<Directory "/data/asite">
Require all granted
</Directory>
</virtualhost>
<virtualhost 192.168.0.4:80>
documentroot /data/bsite
CustomLog "logs/bsite_access_log" combined
<Directory "/data/bsite">
Require all granted
</Directory>
</virtualhost>
<virtualhost 192.168.0.5:80>
documentroot /data/csite
CustomLog "logs/csite_access_log" combined
<Directory "/data/csite">
Require all granted
</Directory>
</virtualhost>
设置站点首页
root@z1:~# ip a a 192.168.0.4/21 dev eth0
root@z1:~# ip a a 192.168.0.5/21 dev eth0
root@z1:~# mkdir /data/{asite,bsite,csite} -p
root@z1:~# echo "a aa" > /data/asite/index.html
root@z1:~# echo "b bb" > /data/bsite/index.html
root@z1:~# echo "c cc" > /data/csite/index.html
测试
[root@node1 ~]# curl 192.168.0.3
a aa
[root@node1 ~]# curl 192.168.0.4
b bb
[root@node1 ~]# curl 192.168.0.5
c cc
6.2 基于port的多虚拟主机
conf
listen 81
listen 82
listen 83
<virtualhost *:81>
documentroot /data/asite
<Directory "/data/asite">
Require all granted
</Directory>
</virtualhost>
<virtualhost *:82>
documentroot /data/bsite
<Directory "/data/bsite">
Require all granted
</Directory>
</virtualhost>
<virtualhost *:83>
documentroot /data/csite
<Directory "/data/csite">
Require all granted
</Directory>
</virtualhost>
测试
[root@node1 ~]# curl 192.168.0.3:81
a aa
[root@node1 ~]# curl 192.168.0.3:82
b bb
[root@node1 ~]# curl 192.168.0.3:83
c cc
6.3 基于主机头的多虚拟主机
conf
<virtualhost *:80>
documentroot /data/asite
servername www.a.com
<Directory "/data/asite">
Require all granted
</Directory>
</virtualhost>
<virtualhost *:80>
documentroot /data/bsite
servername www.b.com
<Directory "/data/bsite">
Require all granted
</Directory>
</virtualhost>
<virtualhost *:80>
documentroot /data/csite
servername www.c.com
<Directory "/data/csite">
Require all granted
</Directory>
</virtualhost>
修改dns
[root@node1 ~]# vim /etc/hosts
192.168.0.3 www.a.com www.b.com www.c.om
测试:
[root@node1 ~]# curl www.a.com
a aa
[root@node1 ~]# curl www.b.com
b bb
[root@node1 ~]# curl www.c.com
c cc
7.页面压缩
使用mod_deflate模块压缩页面优化传输速度
适用场景:
(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持
(2) 压缩适于压缩的资源,例如文本文件
7.1方法:
-
启动压缩模块
LoadModule deflate_module modules/mod_deflate.so
-
调用DEFLATE输出过滤器
设置过滤器,并向过滤器添加明确说明哪些是能通过过滤,允许使用压缩功能的文件类型
SetOutputFilter DEFLATE
常见的两种压缩类型
AddOutputFilterByType DEFLATE text/plain (添加纯文本类型)
AddOutputFilterByType DEFLATE text/html (添加html) -
设置压缩比
Level of compression (Highest 9 - Lowest 1)
DeflateCompressionLevel 9
-
其他的压缩类型
- AddOutputFilterByType DEFLATE text/xml
- AddOutputFilterByType DEFLATE application/xml
- AddOutputFilterByType DEFLATE application/x-javascript
- AddOutputFilterByType DEFLATE text/javascript
- AddOutputFilterByType DEFLATE text/css
7.2 例子:
确认环境:
[root@node1 ~]# httpd -M |grep modeflate
deflate_module (shared)
没有启用压缩之前 请求内容的大小Content-Length 为347
[root@node1 html]# curl -I 192.168.0.3/m.txt
HTTP/1.1 200 OK
Date: Sat, 22 Feb 2020 14:42:21 GMT
Server: Apache
Last-Modified: Sat, 22 Feb 2020 14:37:44 GMT
ETag: "15b-59f2b14cbad53"
Accept-Ranges: bytes
Content-Length: 347
Content-Type: text/plain; charset=UTF-8
[root@node1 html]# ll -t
total 8
-rw-r--r-- 1 root root 20 Feb 22 22:38 index.html
-rw-r--r-- 1 root root 347 Feb 22 22:37 m.txt
[root@node1 html]#
启用压缩之后
conf:
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
DeflateCompressionLevel 9
发现之后请求的内容大小变为250
注意:curl 浏览器 默认不启用压缩, --compressed 启用压缩。
[root@node1 html]# curl -I --compressed 192.168.0.3/m.txt
HTTP/1.1 200 OK
Date: Sat, 22 Feb 2020 14:47:39 GMT
Server: Apache
Last-Modified: Sat, 22 Feb 2020 14:37:44 GMT
ETag: "15b-59f2b14cbad53-gzip"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 250
Content-Type: text/plain; charset=UTF-8
7.3 注意
在服务器开启压缩功能后,客户端在获取资源的过程中,是否启用压缩功能,是一个协商的过程。大多数浏览器默认是使用压缩的
8. httpd 的反向代理
启用反向代理
代理服务器的设置:
ProxyPass “/” “http://www.example.com/” 访问 代理服务器的主目录时 跳转到example.com
ProxyPassReverse “/” “http://www.example.com/” 把example,com 响应的内容 跳到 代理服务器的 / 根下
特定URL反向代理
ProxyPass “/images” “http://www.example.com/”
ProxyPassReverse “/images” http://www.example.com/