安装
[root@servera ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.1 (Ootpa)
[root@servera ~]# yum -y install httpd mod_ssl httpd-manual
[root@servera ~]# firewall-cmd --permanent --add-service=http --add-service=https
[root@servera ~]# firewall-cmd --reload
[root@servera ~]# echo "" >> /var/www/html/index.html
[root@servera ~]# ls -Z /var/www/html/index.html
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html
# 拷贝默认文件(及http)
[root@servera ~]# cd /etc/httpd/conf.d/
[root@servera conf.d]# cp /usr/share/doc/httpd/httpd-vhosts.conf defaults.conf
[root@servera conf.d]# vim defaults.conf
<VirtualHost _default_:80>
DocumentRoot "/var/www/html"
<Directory /var/www/html>
Order allow,deny
allow from 127.0.0.1
allow from 172.25.250.0/4
</Directory>
</VirtualHost>
[root@servera conf.d]# systemctl restart httpd
# 查看帮助文件、示例
[root@servera conf.d]# man httpd.conf
一些值得注意的默认配置选项说明:
DocumentRoot /var/www/html : Apache服务器内容的顶级目录。apache用户需要对任何文件的读取权限以及对目录及其任何子目录的读取和执行权限。不要在目录路径的末尾放置斜线
ServerName: : 指定httpd服务器的完全限定域名或IP地址以及服务器侦听的可选端口。FQDN必须可解析为IP地址
Listen 80 : 守护进程在TCP端口80上列出
ErrorLog "logs/error_log" : 错误消息被记录到/var/log/httpd/error_log
/etc/httpd/conf.d/welcome.conf(没有则新建) : 如果默认的DocumentRoot /var/www/html中没有内容,该文件将在http://localhost/上启用"welcome page"
httpd-2.4版本:
<Directory "/PATH/TO/FILE">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# options包括以下可选参数
Indexes 允许目录浏览,当客户仅指定要访问的目录,但没有指定要访问的文件,且目录下不存在默认文档时,显示该目录中的文件及子目录列表索引
MultiViews 允许内容协商的多重视图,允许返回指定的访问目录下的相关联的文件
All All包含了除MultiViews之外的所有特性,如没有指定options,默认为All
ExecCGI 允许在该目录下执行CGI脚本
FollowSymLinks 允许跟踪符号链接到源文件
Includes 允许服务器端包含功能
IncludesNoExec 允许服务器端包含功能,但禁止执行CGI脚本
None 不调用options参数
AllowOverride: AllowOverride选项用于定义每个目录下.htaccess文件中的指令类型,但通常设置成None。
Order: Order选项用于定义缺省的访问权限与Allow和Deny语句的处理顺序。
Allow/Deny: Allow和Deny语句可以针对客户机的域名或IP地址进行设置,以决定哪些客户机能够访问服务器。如:Allow from all或者Deny from 172.16.0.0/24等等。
Require all granted: 此为http-2.4中的允许所有人访问的格式。除此还可以禁止某个IP或域名的访问,如:Require not ip 1.1.1.1、Require not host www.lab.example.com或者禁止所有人访问Require all denied。
配置https
[root@servera conf.d]# cp defaults.conf defaultssl.conf
# 拷贝证书
[root@servera ~]# cp files/10/{servera,cacert}.crt /etc/pki/tls/certs/
[root@servera ~]# cp files/10/servera.key /etc/pki/tls/private/
[root@servera ~]# ll /etc/pki/tls/certs/{servera,cacert}.crt
-rw-r--r--. 1 root root 1395 Jun 3 07:51 /etc/pki/tls/certs/cacert.crt
-rw-r--r--. 1 root root 4583 Jun 3 07:51 /etc/pki/tls/certs/servera.crt
[root@servera ~]# ll /etc/pki/tls/private/servera.key
-rw-r--r--. 1 root root 1704 Jun 3 07:52 /etc/pki/tls/private/servera.key
[root@servera conf.d]# vim defaultssl.conf
<VirtualHost *:443>
ServerName servera.lab.example.com
DocumentRoot "/var/www/html"
# 主要是下面4行关于SSL的条目
SSLEngine on
SSLCertificateFile "/etc/pki/tls/certs/servera.crt"
SSLCertificateChainFile "/etc/pki/tls/certs/cacert.crt"
SSLCertificateKeyFile "/etc/pki/tls/private/servera.key"
<Directory /var/www/html>
Order allow,deny
allow from 127.0.0.1
allow from 172.25.250.0/4
</Directory>
</VirtualHost>
[root@servera conf.d]# systemctl restart httpd
在Directory中基于用户的访问控制
在Directory中支持的认证方式有两种Basic明文认证和digest消息摘要认证,由于并不是所有浏览器都支持摘要认证,因此一般来说用的较多的是明文认证
首先利用htpasswd命令生成认证的配置文件:
[root@servera conf.d]# htpasswd -cb /data/userpasswd zhangsan 123456
[root@servera conf.d]# htpasswd -b /data/userpasswd lisi 654321
[root@servera conf.d]# cat /data/userpasswd
zhangsan:$apr1$4I66olg8$wVlOMOCCWbt01ma4Xyqnk/
lisi:$apr1$RiLn1b3I$Q88TzkbMhWfU5135PoBie.
# 修改userpasswd文件的安全上下文
注:man semanage-fcontext 搜EXAMPLE即可找到如下示例
[root@servera conf.d]# semanage fcontext -a -t httpd_sys_content_t "/mnt/www/html(/.*)?"
[root@servera conf.d]# semanage fcontext -a -t httpd_sys_content_t "/data(/.*)?"
随后编辑httpd的主配置文件,设置用户认证:
[root@servera conf.d]# pwd
/etc/httpd/conf.d
[root@servera conf.d]# vim defaults.conf
<VirtualHost _default_:80>
DocumentRoot /var/www/html/
<Directory /var/www/html> # 修改默认的web目录
Order allow,deny
allow from 127.0.0.1
allow from 172.25.250.0/24
AllowOverride none ----该行(含)往下的5行是主要的条目
Options none
AuthType Basic
AuthName "welcome to my server." # 设置认证提示
AuthUserFile "/data/userpasswd" # 指定认证文件的路径
Require user zhangsan lisi # 指定允许访问的认证用户
</Directory>
</VirtualHost>
# 浏览器访问servera的IP则会弹出输入用户名和密码的框,输入zhangshang或lisi及对应的密码即可登录进去
# 一定要在httpd.conf中配置,如在/etc/httpd/conf.d目录中的文件中配置则会报错
[root@servera ~]# vim /etc/httpd/conf/httpd.conf
<virtualhost *:80>
Servername www.a.com
Documentroot /var/www/html
<Directory "/var/www/html">
AllowOverride none
Options none
Require all granted
</Directory>
</virtualhost>
<virtualhost *:80>
Servername www.b.com
Documentroot /mnt/www/html
<Directory "/mnt/www/html">
AllowOverride none
Options none
Require all granted
</Directory>
</virtualhost>
[root@servera conf.d]# mkdir -p /mnt/www/html
[root@servera conf.d]# semanage fcontext -a -t httpd_sys_content_t "/mnt/www/html(/.*)?"
[root@servera conf.d]# restorecon -Rv /mnt/www/html/
[root@servera conf.d]# echo "123456" >> /var/www/html/index.html
[root@servera conf.d]# cat /var/www/html/index.html
Practice 9-10
[root@servera conf.d]# cat /mnt/www/html/index.html
<h1>123456789</h>
[root@servera conf.d]# systemctl restart httpd
[root@servera conf.d]# curl www.a.com
Practice 9-10
[root@servera conf.d]# curl www.b.com
<h1>123456789</h>