vim westos.html
hello world
测试:firefox输入server端ip(如:172.25.254.44),则显示westos.html中的内容
注:输入后一般默认是http://172.25.254.44,若不是修改则需要修改为http://
选择虚拟机desktop为server端:
修改主机名:hostnamectl set-hostname apache.example.com
给server端一个静态IP:172.25.254.137
配置可用yum源:vim /etc/yum.repos.d/rhel_dvd.repo
清空yum缓存:yum clean all
下载http服务:yum install httpd -y
[root@apache ~]# systemctl start httpd ##开启httpd服务# [root@apache ~]# systemctl enable httpd.service ##开机启动httpd服务## ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service' [root@apache ~]# firewall-cmd --list-all ##查看火墙的服务状态## public (default, active) interfaces: eth0 sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules: [root@apache ~]# firewall-cmd --permanent --add-service=http ##永久开启http服务## success [root@apache ~]# firewall-cmd --permanent --add-service=https ##永久开启https服务## success [root@apache ~]# firewall-cmd --reload ##刷新火墙服务状态## success [root@apache ~]# firewall-cmd --list-all public (default, active) interfaces: eth0 sources: services: dhcpv6-client http https ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
实验:
client用浏览器访问172.25.254.137,应显示apache的测试页
注:若显示Unable to connect,则浏览器访问172.25.254.137可能并未使用http协议
server端:
[root@apache ~]# cd /var/www/html/ ##apache服务共享文件的默认目录##
[root@apache html]# ls
[root@apache html]# vim index.html ##编写http服务的默认分享文件,该文件的文件名必须以.html结尾##
[root@apache html]# cat index.html
hello
this is 172.25.254.137
实验:
client用浏览器再次访问172.25.254.137,应显示hello this is 172.25.254.137
注:此处vim中的换行在网页中无法显示
server端:
[root@apache html]# netstat -antlpe | grep httpd
tcp6 0 0 :::80 :::* LISTEN 0 97853 3155/httpd
[root@apache html]# vim /etc/httpd/conf/httpd.conf
40 #
41 #Listen 12.34.56.78:80
42 Listen 8080 ##修改默认端口80为8080##
43
[root@apache html]# systemctl restart httpd
实验:
因为默认的80端口被修改为8080,所以此时client若用浏览器再次访问172.25.254.137,则显示Unable to connect;应该访问172.25.254.137:8080,然而网页还是显示Unable to codnnect,可能是火墙上的8080端口没开。
server端:
[root@apache html]# firewall-cmd --list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client http https ssh
ports: ##8080端口没开##
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
[root@apache html]# firewall-cmd --permanent --add-port=8080/tcp ##在火墙上永久开启8080端口##
success
[root@apache html]# firewall-cmd --reload ##刷新火墙状态##
success
[root@apache html]# firewall-cmd --list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client http https ssh
ports: 8080/tcp ##8080端口已开启##
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
实验:
client浏览器再次访问172.25.254.137:8080,显示hello this is 172.25.254.137则实验ok
将默认端口改回80继续下面的实验
server端:
[root@apache html]# vim /etc/httpd/conf/httpd.conf
[root@apache html]# systemctl restart httpd
[root@apache html]# vim westos
[root@apache html]# cat westos
the page of westos and this is 172.25.254.137
[root@apache html]# ls
index.html westos
[root@apache html]# rm -f index.html
[root@apache html]# ls
westos
实验:
client用浏览器访问172.25.254.137,则显示apache测试页。原因是http服务默认分享文件index.html被删除
client用浏览器访问172.25.254.137/westos,则显示the page of westos and this is 172.25.254.137
server端:
[root@apache html]# vim /etc/httpd/conf/httpd.conf
162 #
163
164 DirectoryIndex index.html westos ##httpd服务的默认分享文件##
165
166
[root@apache html]# systemctl restart httpd
实验:
client用浏览器访问172.25.254.137,则显示the page of westos and this is 172.25.254.137
server端:
[root@apache html]# mkdir /www/html -p
[root@apache html]# cd /www/html/
[root@apache html]# ls
[root@apache html]# vim westos
[root@apache html]# cat westos
the page of /www/html/westos
实验:
client用浏览器访问172.25.254.137显示的是the page of westos and this is 172.25.254.137,而非文件/www/html/westos中的内容
server端:
[root@apache html]# vim /etc/httpd/conf/httpd.conf
118 #
119 #DocumentRoot "/var/www/html"
120 DocumentRoot "/www/html"
121
[root@apache html]# systemctl restart httpd
实验:
client用浏览器访问172.25.254.137显示apache的测试页;访问172.25.254.137/westos则显示Forbidden You don't have permission to access /westos on this server.
排错:报错是权限问题
清空server端的日志(> /var/log/messages)---->client端用浏览器再次访问172.25.254.137/westos---->查看server端的日志(cat /var/log/messages),日志内容如下
.........
***** Plugin catchall (17.1 confidence) suggests **************************
If you believe that httpd should be allowed getattr access on the file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep httpd /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp
.........
一般这样的日志都是SELinux的问题,解决方法如下:
server端:
[root@apache html]# ls -Z
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 westos
[root@apache html]# ls -Z /var/www/
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
[root@apache html]# semanage fcontext -a -t httpd_sys_content_t '/www(/.*)?'
[root@apache html]# restorecon -R /www/
[root@apache html]# restorecon -RvvF /www/
restorecon reset /www context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /www/html context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /www/html/westos context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:httpd_sys_content_t:s0
[root@apache html]# ls -Z /www/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
实验:
client端用浏览器访问172.25.254.137/westos,依然显示权限问题
排错:server端清空日志,client端访问后server端日志为空
[root@apache html]# cd /etc/httpd/
[root@apache httpd]# ls
conf conf.d conf.modules.d logs modules run
[root@apache httpd]# cd logs
[root@apache logs]# ls
access_log error_log ##access_log为服务的访问日志,error_log为服务的报错日志##
[root@apache logs]# > access_log
[root@apache logs]# > error_log
##清空该服务的全部日志,client端再次访问后查看日志##
[root@apache logs]# cat access_log
172.25.254.44 - - [11/Mar/2017:05:24:48 -0500] "GET /westos HTTP/1.1" 403 208 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0"
[root@apache logs]# cat error_log
[Sat Mar 11 05:24:48.566786 2017] [authz_core:error] [pid 6433] [client 172.25.254.44:59764] AH01630: client denied by server configuration: /www/html/westos
##报错日志显示客户被服务配置拒绝##
[root@apache logs]# vim /etc/httpd/conf/httpd.conf ##修改httpd服务的配置文件,给/www/html/westos文件权限##
118 #
119 #DocumentRoot "/var/www/html"
120 DocumentRoot "/www/html"
121
122 Require all granted
123
124
[root@apache logs]# systemctl restart httpd
实验:
client端访问172.25.254.137/westos,则显示the page of /www/html/westos ,排错成功
[root@apache logs]# vim /etc/httpd/conf/httpd.conf
118 #
119 DocumentRoot "/var/www/html"
120
121 #
122 # Relax access to content within /var/www.
123 #
[root@apache logs]# systemctl restart httpd
##还原配置文件,并重启服务进行下一步实验操作##
server端:
[root@apache logs]# cd /var/www/html/
[root@apache html]# ls
westos
[root@apache html]# vim westos
[root@apache html]# cat westos
this is www.westos.com
实验:
client访问172.25.254.137,则显示this is www.westos.com
client端添加本地域名解析:
[root@foundation44 ~]# vim /etc/hosts
[root@foundation44 ~]# tail -n 1 /etc/hosts
172.25.254.137 www.westos.com
此时client访问www.westos.com,就相当于访问172.25.254.137,显示this is www.westos.com
操作目的:client访问不同域名显示不同内容
首先client端添加本地域名解析,并确定每个域名都能ping通:
[root@foundation44 ~]# vim /etc/hosts
[root@foundation44 ~]# tail -n 1 /etc/hosts
172.25.254.137 www.westos.com sport.westos.com music.westos.com
[root@foundation44 ~]# ping www.westos.com
PING www.westos.com (172.25.254.137) 56(84) bytes of data.
64 bytes from www.westos.com (172.25.254.137): icmp_seq=1 ttl=64 time=0.174 ms
64 bytes from www.westos.com (172.25.254.137): icmp_seq=2 ttl=64 time=0.161 ms
^C
--- www.westos.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.161/0.167/0.174/0.014 ms
[root@foundation44 ~]# ping sport.westos.com
PING www.westos.com (172.25.254.137) 56(84) bytes of data.
64 bytes from www.westos.com (172.25.254.137): icmp_seq=1 ttl=64 time=0.168 ms
64 bytes from www.westos.com (172.25.254.137): icmp_seq=2 ttl=64 time=0.210 ms
^C
--- www.westos.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.168/0.189/0.210/0.021 ms
[root@foundation44 ~]# ping music.westos.com
PING www.westos.com (172.25.254.137) 56(84) bytes of data.
64 bytes from www.westos.com (172.25.254.137): icmp_seq=1 ttl=64 time=0.192 ms
64 bytes from www.westos.com (172.25.254.137): icmp_seq=2 ttl=64 time=0.180 ms
^C
--- www.westos.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.180/0.186/0.192/0.006 ms
注:此时client访问以上三个域名均显示相同内容this is www.westos.com
server端:
[root@apache ~]# cd /var/www/html/
[root@apache html]# mkdir /var/www/sport ##虚拟主机sport.westos.com的httpd服务的默认分享目录##
[root@apache html]# mkdir /var/www/music ##虚拟主机music.westos.com的httpd服务的默认分享目录##
[root@apache html]# echo this is sport.westos.com > /var/www/sport/westos
[root@apache html]# echo this is music.westos.com > /var/www/music/westos
[root@apache html]# cat /var/www/sport/westos
this is sport.westos.com
[root@apache html]# cat /var/www/music/westos
this is music.westos.com
[root@apache html]# cat /var/www/html/westos
this is www.westos.com
[root@apache html]# cd /etc/httpd/conf.d
[root@apache conf.d]# ls
autoindex.conf README userdir.conf welcome.conf
[root@apache conf.d]# vim default.conf ##虚拟主机www.westos.com的配置文件##
1
2 Documentroot /var/www/html
3 customlog "logs/default.log" combined
4
5
6
7 require all granted
8
[root@apache conf.d]# systemctl restart httpd
此时client访问www.westos.com,则显示this is www.westos.com
[root@apache conf.d]# cp default.conf sport.conf
[root@apache conf.d]# vim sport.conf
1
2 Servername sport.westos.com
3 Documentroot /var/www/sport
4 customlog "logs/default.log" combined
5
6
7
8 require all granted
9
[root@apache conf.d]# systemctl restart httpd
此时client访问sport.westos.com,则显示this is sport.westos.com
[root@apache conf.d]# cp default.conf music.conf
[root@apache conf.d]# vim music.conf
1
2 Servername music.westos.com
3 Documentroot /var/www/music
4 customlog "logs/default.log" combined
5
6
7
8 require all granted
9
[root@apache conf.d]# systemctl restart httpd
此时client访问music.westos.com,则显示this is music.westos.com
server端:
[root@apache conf.d]# cd /var/www/music/
[root@apache music]# ls
westos
[root@apache music]# mkdir admin
[root@apache music]# cd admin/
[root@apache admin]# vim westos
[root@apache admin]# cat westos
the admin's page and the host is music.westos.com
此时client访问music.westos.com/admin/,则显示the admin's page and the host is music.westos.com
补充参数:
以虚拟主机music.westos.com的配置文件为例:
1
2 Servername music.westos.com
3 Documentroot /var/www/music
4 customlog "logs/default.log" combined
5
6
7
8 require all granted
9
10
11
12 Order allow,deny
13 allow from all
14 deny from 172.25.254.44
15
重启服务后的效果是172.25.254.44访问music.westos.com则显示被拒绝;172.25.254.44以外的client访问music.westos.com则显示the admin's page and the host is music.westos.com
若修改该配置文件第三部分的参数:
10
11
12 Order deny,allow
13 allow from all
14 deny from 172.25.254.44
15
重启服务后的效果是包括172.25.254.44在内的client均能正常访问music.westos.com/admin
server端:
[root@apache ~]# cd /etc/httpd/conf
[root@apache conf]# ls
httpd.conf magic
[root@apache conf]# htpasswd -cm apacheuser admin ##创建一个加密文件且默认apache htpassswd命令采用MD5算法对密码进行加密;admin表示用户名##
New password:
Re-type new password:
Adding password for user admin
[root@apache conf]# cat apacheuser ##查看加密文件##
admin:$apr1$KDa9QbRH$ZN8EJqoOTCEMaIKzpR8ST0
[root@apache conf]# ls
apacheuser httpd.conf magic
[root@apache conf]# htpasswd -m apacheuser tom ##加密文件存在的情况下,再次创建用户及密码时无需加参数-c##
New password:
Re-type new password:
Adding password for user tom
[root@apache conf]# cd ../conf.d
[root@apache conf.d]# vim music.conf ##修改虚拟主机music.westos.com配置文件的第三部分##
10
11
12 Authuserfile /etc/httpd/conf/apacheuser ##指定用户认证文件位置##
13 Authname "Please input your name and passwd" ##用户访问时显示给用户的信息##
14 Authtype basic ##认证类型##
15 Require user admin ##admin用户可用##
16
[root@apache conf]# systemctl restart httpd
实验:
client访问music.westos.com回弹出对话框要求输入用户名以及用户密码,此时admin用户及其密码可用,tom用户及其密码不可用
若将第15行参数改为Require valid-user后重启服务,则表示加密文件apacheuser中的用户都可用