文章目录
一.Apache简单介绍
问:Apache是什么?
答:1、Apache是一个Web服务器软件,Apache取自“a patchy server”,意思是充满补丁的服务器,它可以运行在几乎所有广泛使用的计算机平台上,是最流行的Web服务器端软件之一
2、在web被访问时通常使用http://的方式,http是超文本传输协议
http:// 超文本传输协议的支持软件大概有以下几种(可以用下面的命令查询:curl -I 浏览器名称,例如:curl -I baidu.com查询百度使用的服务器软件,curl -I qq.com,查询qq的服务器软件):Apache、nginx、stgw、jfe、Tengine,也就是说如果你在系统中安装了这些软件中的任何一种,那么你的系统对外就支持http协议,别人就可以通过浏览器来访问你的主机
例如:
二.Apache的安装及启用
安装
rhel8中的安装命令:dnf install httpd.x86_64 -y
rhel7中的安装命令:yum install httpd.x86_64 -y
Apache的启用
1、systemctl enable --now httpd #开启服务并设定为开机启动
相当于systemctl start httpd + sysytemctl enable httpd两条命令一起使用
2、设定防火墙允许http和https服务
firewall-cmd --list-all #查看防火墙信息
firewall-cmd --get-services #查看防火墙支持的服务名称
firewall-cmd --permanent --add-service=http #在火墙中永久开启http访问
firewall-cmd --permanent --add-service=https #在火墙中永久开启https访问
firewall-cmd --reload #刷新防火墙使设定生效
启用过程:
Apache启用成功:默认访问Apache的测试页
三.Apache的基本信息
Apache | 基本信息 |
---|---|
服务名称 | httpd |
主配置文件 | /etc/httpd/conf/httpd.conf |
子配置文件 | /etc/httpd/conf.d/*.conf |
默认发布目录 | /var/www/html |
默认发布文件 | index.html |
默认端口 | http为80端口 https为443端口 |
默认用户 | apache |
日志存放位置 | /etc/httpd/logs |
四.Apache的基本配置
实验环境:
rhel7能正常上网 ,配置静态网络:IP DNS 网关
rhel8:安装yum源,安装Apache服务,ip:192.168.0.110
1.Apache端口修改
1、netstat -antlupe | grep httpd
或
ss -antlupe | grep httpd
#查看Apache服务的端口
ps aux | grep httpd #查看apache服务进程的信息,如用到的用户等等
2、修改主配置文件的端口号为8080端口然后设置防火墙规则使其可以成功访问
vim /etc/httpd/conf/httpd.conf
Listen 8080
systemctl restart httpd
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
3、修改主配置文件的端口号为6666端口然后设置防火墙规则使其可以成功访问
<1>
vim /etc/httpd/conf/httpd.conf
Listen 6666
<2>
systemctl restart httpd(此时在selinux为强制模式时服务会启动失败)
<3>
semanage port -l | grep http #查看httpd服务的允许端口
semanage port -a -t http_port_t -p tcp 6666 #将6666添加到允许端口中
systemctl restart httpd
<4>
firewall-cmd --permanent --add-port=6666/tcp
firewall-cmd --reload
1、
2、修改主配置文件的端口号为8080端口然后设置防火墙规则使其可以成功访问
<1> 查看服务的主配置文件
<2> 在主配置文件中修改端口号为8080
<3> 设置防火墙允许8080端口
访问成功
3、修改主配置文件的端口号为6666端口然后设置防火墙规则使其可以成功访问
<1>
<2> systemctl restart httpd(此时在selinux为强制模式时服务会启动失败)
在selinux为警告模式时服务重启成功,并且可以看到端口号为6666
为什么selinux对8080端口没有影响,而对6666端口有影响呢,这是因为8080端口在httpd的缓存端口中,而6666不在服务的允许端口中,所以selinux会拒绝设置该服务的端口为6666,因此我们需要添加6666到httpd服务允许的端口列表中
<3>添加防火墙允许6666端口然后就可以访问成功
2.默认发布文件修改
index.html为httpd服务的默认发布文件,当该文件存在时默认访问文件里的内容,
如果该文件不存在,那么默认访问Apache的默认测试页,可以修改默认发布文件
例如:修改默认发布文件为wei.html
vim /etc/httpd/conf/httpd.conf
DirectoryIndex wei.html index.html
注意:此处写的文件按顺序访问,默认访问第一个文件的内容
systemctl restart httpd
1、
默认访问位置:
默认访问内容为index.html文件的内容
2、修改文件的访问顺序后,默认访问wei.html文件的内容
3.默认发布目录的修改
修改默认发布目录为/wei/html
vim /etc/httpd/conf/httpd.conf
DocumentRoot "/wei/html" #修改默认发布目录
<Directory "/wei/html">
Require all granted
</Directory> #对/wei目录进行授权
修改selinux为警告模式然后重启服务就可以访问成功
注意:如果selinux为强制模式的话需要修改目录的安全上下文:
semanage fcontext -a -t httpd_sys_content_t '/wei(/.*)?' #修改安全上下文
restorecon -RvvF /wei/ #刷新
systemctl restart httpd
此时再去浏览器访问可以成功
当selinux开启时需要修改安全上下文才可以访问成功
五.Apache的访问控制
实验素材:
mkdir /var/www/html/wei
vim /var/www/html/wei/index.html
文件内容:
<h1>westosdir's page</h1>
浏览器访问:192.168.0.110/wei
此时两台主机都能访问该文件的内容
1.基于客户端ip的访问控制
用来控制哪个用户可以访问,哪个用户不可以访问
ip白名单
vim /etc/httpd/conf/conf.d
<Directory "/var/www/html/wei">
Order Deny,Allow #读取名单的顺序,后面的名单会覆盖前面名单里相同ip的权限
Allow from 192.168.0.109
Deny from All
</Directory>
systemctl restart httpd
ip黑名单
<Directory "/var/www/html/wei">
Order Allow,Deny
Allow from All
Deny from 192.168.0.109
</Directory>
例如设置IP为192.168.0.109的rhel7主机为黑名单:
2.基于用户的访问控制
1、
vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/wei">
AuthUserfile /etc/httpd/hahafile #指定认证文件
AuthName "Please input your name and password" #认证提示语
AuthType basic #认证类型
Require valid-user #允许所有用户通过认证
或( Require user admin #允许通过的认证用户)
</Directory>
2、
htpasswd -cm /etc/httpd/hahafile haha #生成认证文件
htpasswd -m /etc/httpd/hahafile hehe #生成认证文件
注意:
当/etc/httpd/hahafile文件存在时,在添加用户时不要加-c参数,否则会覆盖原文件内容
systemctl restart httpd
1、配置文件的写法
2、注意:这两个用户不是系统内的真实用户,是虚拟用户
此时在浏览器访问192.168.0.110时会提示输入用户名和密码
六.Apache的虚拟主机
一般情况下,我们在访问一个网站时,能看到许多超链接,每点击一个超链接都会进入到另一个页面,那么我们怎么才能做到不同的子站点有不同的文件对应,这就叫做Apache的虚拟主机,即让一个Apache能够发布多个站点测试页,从而实现一个ip对应多个站点
我们在访问网站时一般都输入网站的域名,但是此时因为没有运营商为我们的IP进行解析,因此需要我们手动地在客户主机中进行本地域名解析:
设置本地解析:
vim /etc/hosts
192.168.0.110 www.weiwei.com
1、建立站点测试页
mkdir -p /var/www/weiwei.com/{news,wenku}
给目录下的index.html文件写入内容
2、在子配置目录中添加文件,文件名字随意,但必须以 .conf 结尾,例子中的文件为virtualhost.conf
文件内容如下:
<VirtualHost _default_:80> #默认访问80端口
DocumentRoot "/var/www/html" #访问文件存放位置
CustomLog logs/default.log combined #日志存放位置
注意:以上为默认虚拟主机的配置,即访问没有指定过名称的主机访问的是该页面
</VirtualHost> <VirtualHost *:80>
ServerName wenku.weiwie.com
DocumentRoot "/var/www/weiwei.com/wenku"
CustomLog logs/wenku.log combined
</VirtualHost> <VirtualHost *:80>
ServerName news.weiwei.com
DocumentRoot "/var/www/weiwei.com/news"
CustomLog logs/news.log combined
</VirtualHost>
systemctl restart httpd
测试:
在浏览器所在主机中手动进行地址解析:
vim /etc/hosts
192.168.0.11 www.westos.com wenku.westos.ocm news.westos.com
七.Apache的语言支持
Apache默认支持html语言,也可以设定支持PHP语言和perl语言
设置Apache支持php语言
编写PHP的测试页
vim /var/www/html/index.php
内容:
<?php
phpinfo();
?>
dnf install php -y #安装PHP
systemctl restart httpd #重启Apache即可让Apache识别PHP模块
1、安装PHP,安装好后Apache主配置目录中会多一个文件php.conf
2、在Apache服务中编写PHP测试页:vim /var/www/html/index.php
测试:浏览器访问
设置Apache支持perl语言
因为perl语言是一个脚本型的语言,所以主要是让系统支持cgi(common gateway interface——公共网关接口),因为有很多程序是Apache以外的程序,但是我们要把程序的结果用页面的形式展示出来,通过Apache进行共享,所以要让Apache能够读懂这些程序,因此Apache就对外留了一个接口——cgi,第三方程序通过这个接口把数据传递到Apache内部,Apache就可以对传递进来的数据进行发布
cgi
mkdir /var/www/html/cgidir
vim /var/www/html/cgidir/index.cgi
文件内容:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello World.";
chmod +x index.cgi #因为cgi为可执行脚本,所以要给该文件执行权限
./index.cgi #执行该脚本可以看到输出结果
vim /etc/httpd/conf.d/virtualhost.conf
<Directory "/var/www/html/cgidir">
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
sysytemctl restart httpd
但是此时去访问直接显示文件内容,而没有执行,因为Apache不知道该文件中的内容需要执行以后显示执行结果
告诉Apache文件.cgi中的内容需要执行:
执行成功,显示结果
结束!!!