使用Apache服务部署静态网站

网站服务程序:
yum install httpd 安装Apache服务程序(Apache服务的软件包名为httpd)
systemctl start httpd 启用httpd服务
systemctl enable httpd 加入开机启动项
用浏览器访问:127.0.0.1(本机)可以看到httpd服务程序的默认页面,当看到这个页面时,说明服务程序正常启动,但可能还会有另外两种情况。
①权限不够
②网站内没有数据
在这里插入图片描述

配置服务文件参数:
服务目录 /etc/httpd
主配置文件 /etc/httpd/conf/httpd.conf
网站数据目录 /var/www/html
访问日志 /var/log/httpd/access_log
错误日志 /var/log/httpd/error_log
在这里插入图片描述
①.建立新的网站数据保存目录,并创建首页文件。
mkdir /home/wwwroot
echo “hello” > /home/wwwroot/index.html
②.修改httpd服务程序主配置文件,把网站数据保存路径修改为/home/wwwroot
vim /etc/httpd/conf/httpd.conf

119 DocumentRoot “/home/wwwroot” #用于定义网站数据保存路径的参数DocumentRoot修改为/home/wwwroot

124 <Directory “home/wwwroot”> #用于定义目录权限的参数Directory后面的路径也修改为/home/wwwroot

128

③.重启httpd服务验证效果,此时会发现因为权限不足导致出现的是httpd默认首页(SElinux的安全上下文).
systemctl restart httpd
④.暂时禁用SElinux,发现可以看到正常的网页内容了。
setenforce 0
SElinux安全子系统:
三种配置模式:1.enforcing:强制启用安全策略模式,将拦截服务的不合法请求
2.permissive:遇到服务越权访问时,只发出警告而不强制拦截
3.disabled:对于越权的行为不警告也不拦截
可以使用getenforce命令获得当前SELinux服务的运行模式:
[[email protected] ~]# getenforce
Enforcing
semanage常用参数:
-l:用于查询
-a:用于添加
-m:用于修改
-d:用于删除
-t:指定要想修改的值
restorecon (选项)(指定目录或文件)
-R:对指定目录进行递归操作
-v:显示SELinux安全上下文的修改过程
解决上面的被SElinux拦截问题。
①.把SELinux服务恢复到强制启用安全策略模式
setenforce 1
②.分别查看原始网站数据的保存目录与当前网站数据的保存目录的SELinux安全上下文值
ls -Zd /var/www/html #SElinux安全上下文为httpd_sys_content_t
ls -Zd /home/wwwroot #SELinux安全上下文为home_root_t
③.把当前网站数据保存目录的安全上下文设置成和原始网站数据保存目录的安全上下文一样
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot #修改目录的安全上下文
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/* #修改目录里的所有文件的安全上下文
④.使设置好的SELinux安全上下文立即生效
restorecon -Rv /home/wwwroot/
个人用户主页功能:
getsebool命令:搭配-a参数输出所有安全策略(off禁止,on允许)
setsebool命令:修改SELinux策略中各条规则的布尔值。搭配-P参数使得修改后的SELinux策略规则立即且永久生效。
实现个人用户主页功能。
①.修改配置文件/etc/httpd/conf.d/userdir.conf ,让httpd服务程序开启个人用户主页功能。
vim /etc/httpd/conf.d/userdir.conf


17 UserDir public_html UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录

31 <Directory “/home//public_html"> 注意要和17行的目录名一致

35
②.在用户家目录中建立用于保存网站数据的目录及首页文件。把自己家目录的权限修改为755,以保证其他人也有权限读取里面的内容。退出该用户。
su - linuxprobe
mkdir public_html 注意要和配置文件中的目录名一致
echo “linuxprobe’s website” > public_html/index.html
chmod -Rf 755 ~ ”~“代表就是当前用户的家目录,相当于/home/linuxprobe
exit
③.重启httpd服务。在浏览器输入网址验证(格式:网址/~用户名),会报错。原因依然在于SELinux。
systemctl restart httpd
④查询并过滤出所有与http协议相关的安全策略。留意httpd_enable_homedirs是否为on状态,若不是,修改为on状态并立即且永久生效。
getsebool -a | grep http
setsebool -P httpd_enable_homedirs=on
htpasswd命令:建立和更新存储用户名、密码的文本文件, 用于对HTTP用户的basic认证。
-c参数:创建密码文件.如果密码文件已经存在,那么它会重新写入并删去原有内容。
①.生成密码数据库
htpasswd -c /etc/httpd/passwd liwh #生成密码文件,添加一个名为liwh的用户
htpasswd /etc/httpd/passwd liangjm #往密码文件追加一个用户liangjm
②.修改个人用户主页功能的配置文件
vim /etc/httpd/conf.d/userdir.conf

31 <Directory "/home/
/public_html”>
32 AllowOverride all #允许伪静态技术
33 authuserfile “/etc/httpd/passwd” #指定生成的密码文件的存放路径
34 authname “Hello” #当用户尝试访问个人用户网站时的提示信息
35 authtype basic #采用基本验证方式
36 require user mumu #指定用户进行账户密码认证时支持验证的用户(可以支持多个用户验证,比如:mumu,haha)
37
③.重启httpd服务,刷新页面,会弹出窗口要求输入账户密码。其中liwh的帐号密码是没用的,只能用liangjm账号密码验证
systemctl restart httpd
基于ap:kdir -p /home/wwwroot/A
mkdir -p /home/wwwroot/B
mkdir -p /home/wwwroot/C
echo “This is A” > /home/wwwroot/A/index.html
echo “This is B” > /home/wwwroot/B/index.html
echo “This is C” > /home/wwwroot/C/index.html
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/A
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/B
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/C
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/A/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/B/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/C/*
基于ip地址实现虚拟网站主机功能:
①为网卡配置3个ip地址(方法很多)
vim /etc/sysconfig/network-scripts/ifcfg-eno16777728

IPADDR0=192.168.10.10
IPADDR1=192.168.10.20
IPADDR2=192.168.10.30

②.编辑httpd服务的主配置文件,追加写入3个基于IP地址的虚拟主机网站参数
vim /etc/httpd/conf/httpd.conf

113 <VirtualHost 192.168.10.10> #虚拟主机参数开始
114 DocumentRoot /home/wwwroot/B #虚拟主机的家目录
115 ServerName www.b.com #虚拟主机的域名
116 <Directory /home/wwwroot/B > #子目录权限指定
117 AllowOverride None #关闭伪静态
118 Require all granted #允许所有环回请求
119
120 #虚拟主机参数结束
121 <VirtualHost 192.168.10.10>
122 DocumentRoot /home/wwwroot/A
123 ServerName www.a.com
124 <Directory /home/wwwroot/A >
125 AllowOverride None
126 Require all granted
127
128
129 <VirtualHost 192.168.10.30>
130 DocumentRoot /home/wwwroot/C
131 ServerName www.c.com
132 <Directory /home/wwwroot/C >
133 AllowOverride None
134 Require all granted
135
136

③.重启httpd服务,在浏览器分别输入相应的ip地址进行验证。
systemctl restart httpd
1 编辑IP地址与域名之间对应关系的配置文件,保存退出后会立即生效
2 vim /etc/hosts
3 …
4 192.168.10.10 www.a.com www.b.com www.c.com
测试:
访问www.a.com,出现“This is A”;
访问www.b.com,出现“This is B”;
访问www.c.com,出现“This is C”;

基于端口: kdir -p /home/wwwroot/A mkdir -p /home/wwwroot/B mkdir -p /home/wwwroot/C echo “This is A” > /home/wwwroot/A/index.html echo “This is B” > /home/wwwroot/B/index.html echo “This is C” > /home/wwwroot/C/index.html semanage fcontext -a -t httpd_sys_content_t /home/wwwroot semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/A semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/B semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/C semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/A/* semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/B/* semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/C/* 基于ip地址实现虚拟网站主机功能: ①为网卡配置3个ip地址(方法很多) vim /etc/sysconfig/network-scripts/ifcfg-eno16777728 … IPADDR0=192.168.10.10 IPADDR1=192.168.10.20 IPADDR2=192.168.10.30 … ②.编辑httpd服务的主配置文件,追加写入3个基于IP地址的虚拟主机网站参数 vim /etc/httpd/conf/httpd.conf … 113 <VirtualHost 192.168.10.10> #虚拟主机参数开始 114 DocumentRoot /home/wwwroot/B #虚拟主机的家目录 115 ServerName www.b.com #虚拟主机的域名 116 <Directory /home/wwwroot/B > #子目录权限指定 117 AllowOverride None #关闭伪静态 118 Require all granted #允许所有环回请求 119 120 #虚拟主机参数结束 121 <VirtualHost 192.168.10.10> 122 DocumentRoot /home/wwwroot/A 123 ServerName www.a.com 124 <Directory /home/wwwroot/A > 125 AllowOverride None 126 Require all granted 127 128 129 <VirtualHost 192.168.10.30> 130 DocumentRoot /home/wwwroot/C 131 ServerName www.c.com 132 <Directory /home/wwwroot/C > 133 AllowOverride None 134 Require all granted 135 136 … ③.重启httpd服务,在浏览器分别输入相应的ip地址进行验证。 systemctl restart httpd ①.修改httpd服务的主配置文件,添加几个用于监听端口的参数;修改虚拟主机网站参数为基于端口号的形式。 vim /etc/httpd/conf/httpd.conf … 43 Listen 6111 #监听端口6111参数 44 Listen 6222 45 Listen 6333 … 113 <VirtualHost 192.168.10.10:6111> #基于端口的虚拟主机网站参数 … 121 <VirtualHost 192.168.10.10:6222> … 129 <VirtualHost 192.168.10.10:6333> … ②查看SELinux是否允许Apache服务使用新添加的几个监听端口,若不允许则添加这些端口号 semanage port -l | grep http #使用semanage命令查询并过滤出所有与HTTP协议相关且SELinux服务允许的端口列表。 semanage port -a -t http_port_t -p tcp 6111 #在SELinux允许的与HTTP协议相关的端口号中添加相应的端口号 semanage port -a -t http_port_t -p tcp 6222 semanage port -a -t http_port_t -p tcp 6333 semanage port -l | grep http #添加端口号的操作会立即且永久生效,再一次查看与HTTP协议相关且SELinux服务允许的端口列表。 ③.重启httpd服务 systemctl restart httpd 测试: 访问192.168.10.10:6111,显示“This is B”。 访问192.168.10.10:6222,显示“This is A”。 访问192.168.10.10:6333,显示“This is C。 基于域名: kdir -p /home/wwwroot/A mkdir -p /home/wwwroot/B mkdir -p /home/wwwroot/C echo “This is A” > /home/wwwroot/A/index.html echo “This is B” > /home/wwwroot/B/index.html echo “This is C” > /home/wwwroot/C/index.html semanage fcontext -a -t httpd_sys_content_t /home/wwwroot semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/A semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/B semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/C semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/A/* semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/B/* semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/C/* 基于ip地址实现虚拟网站主机功能: ①为网卡配置3个ip地址(方法很多) vim /etc/sysconfig/network-scripts/ifcfg-eno16777728 … IPADDR0=192.168.10.10 IPADDR1=192.168.10.20 IPADDR2=192.168.10.30 … ②.编辑httpd服务的主配置文件,追加写入3个基于IP地址的虚拟主机网站参数 vim /etc/httpd/conf/httpd.conf … 113 <VirtualHost 192.168.10.10> #虚拟主机参数开始 114 DocumentRoot /home/wwwroot/B #虚拟主机的家目录 115 ServerName www.b.com #虚拟主机的域名 116 <Directory /home/wwwroot/B > #子目录权限指定 117 AllowOverride None #关闭伪静态 118 Require all granted #允许所有环回请求 119 120 #虚拟主机参数结束 121 <VirtualHost 192.168.10.10> 122 DocumentRoot /home/wwwroot/A 123 ServerName www.a.com 124 <Directory /home/wwwroot/A > 125 AllowOverride None 126 Require all granted 127 128 129 <VirtualHost 192.168.10.30> 130 DocumentRoot /home/wwwroot/C 131 ServerName www.c.com 132 <Directory /home/wwwroot/C > 133 AllowOverride None 134 Require all granted 135 136 … ③.重启httpd服务,在浏览器分别输入相应的ip地址进行验证。 systemctl restart httpd 1.编辑IP地址与域名之间对应关系的配置文件,保存退出后会立即生效 2 vim /etc/hosts 3 … 4 192.168.10.10 www.a.com www.b.com www.c.com 测试: 访问www.a.com,出现“This is A”; 访问www.b.com,出现“This is B”; 访问www.c.com,出现“This is C”