Web服务
在Linux中存在许多可以提供web服务的软件,httpd、tomcat、nginx等
- Web通信的基本概念
- 基于B/S架构的网页服务
- HTTP
- HTML
【1】、httpd软件
1、httpd软件安装
httpd是软件基金会写出的
软件基金会(Apache)
yum install -y httpdrpm -qa httpd
httpd-2.4.37-62.module+el8.9.0+1436+2b7d5021.x86_64
2、构建基本的Web服务
# 启动服务且开机自启
systemctl start httpd
systemctl enable httpd
httpd服务的默认网也查询路径
/var/www/html
我们在该路径下创建一个名为index.html的文件,作为Web网站的主页面,使用curl去访问
echo hahaha > /var/www/html/index.html
curl 192.168.121.180
hahaha
如果网页文件名不是index.html
会展现测试页面
出现测试页面的原因?
1、没有网页文件
2、网页文件名称不是index.html
3、httpd的访问控制规则被拒绝
4、SELinux没有关闭
3、httpd的配置文件
httpd的配置文件
/etc/httpd/conf/httpd.conf
(1)、模拟配置文件错误
模拟修改配置文件失误,导致httpd启动失败,如何纠错
我们将配置文件中的注释,释放一行,就会引起httpd启动失败
systemctl restart httpd
# 当我们重启时会报以下错误,这时我们可以根据日志去查询报错。
# 使用系统给我们的journalctl -xe命令去查看
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.
当我们使用journalctl -xe去查错误时,要注意,
在启动失败后要立刻去查错,要不然可能会被后面的日志覆盖
(2)、设置httpd寻找网页的路径
httpd默认寻找网页的路径是
/var/www/html
这个是可以修改的
配置文件中的相关参数
DocumentRoot:指定存放网页文件的路径
在配置文件中可以存在多个DocumentRoot,但是只能有一个DocumentRoot有效,最下面的一个DocumentRoot生效
# 配置文件
DocumentRoot "/var/www/myweb"
(3)、路径执行访问控制
将DocumentRoot修改为“/webroot”
此时再重启软件,再/webroot目录下创建index.html文件
使用curl去访问,观察结果?
我们会发现虽然在/webroot下有了index.html文件,但是我们测试时,依旧出现测试页面
出现上述问题的原因:
httpd软件:针对存放网页的路径实行访问控制,自动继承父目录的规则(就近原则)
假设访问控制规则:
/var/www 允许所有客户端访问
/abc 拒绝所有客户端访问
此时
/var/www/test test没有规则,但是www具有规则,此时,test就会自动继承www的规则来作为自己的规则
/abc/aaa aaa没有规则,但是abc具有规则,abc拒绝所有,那么aaa也就是拒绝所有
如果我对aaa专门设置了规则:允许所有,那么aaa就不会继承abc的规则,而按照为aaa设置的规则
<Directory "/var/www">AllowOverride None# Allow open access:Require all granted # 允许所有客户端访问
</Directory><Directory />AllowOverride noneRequire all denied # 拒绝所有客户端访问,针对客户端
</Directory>
所以最开始的问题就有了答案
在默认情况下,必须在/var/www目录下的网页才允许客户端访问
解决方式:修改配置文件,给/webroot新增规则
DocumentRoot "/webroot"
<Directory "/webroot">Require all granted
</Directory>
(4)、DocumentRoot
网络路径和实际路径
网络路径:http://192.168.121.180
实际路径:DocumentRoot所设定的路径/webroot----->index.html
DocumentRoot:指定网页文件的根目录(起始点)
(5)、调用配置文件
主配置文件:
/etc/httpd/conf/httpd.conf
调用配置文件:
/etc/httpd/conf.d/*.conf
我们可以在调用配置文件下新建配置文件,主配置文件会调用 调用配置文件下的内容。
我们在
/etc/httpd/conf.d/*.conf
下新建的配置文件,修改起来比较方便
在主配置文件中存在
IncludeOptional conf.d/*.conf
这样一行,这就指定了调用配置文件的位置
4、端口
标识协议和进程
一个协议可以监听多个端口,一个端口只能由一个协议负责
建议自定义端口时大于1024,端口极限65535
http:80
Listen 80
【2】、虚拟Web主机
虚拟Web主机的优先级高于DocumentRoot的设置
端口的优先级高于虚拟Web主机
1、基于域名
编写新的配置文件,在同一个IP下设置不同的域名
<VirtualHost 192.168.121.180:80>ServerName www.qq.comDocumentRoot /var/www/qq
</VirtualHost><VirtualHost 192.168.121.180:80>ServerName www.lol.comDocumentRoot /var/www/lol
</VirtualHost>
由于我们没有设置DNS,因此我们需要编写hosts文件,来达到可以通过域名去访问的效果
192.168.121.180 www.qq.com www.lol.com
通过域名访问
curl www.qq.com
wo shi qq
curl www.lol.com
wo shi lol
2、基于端口
修改配置文件
将域名改为相同的域名,设置不一样的端口
<VirtualHost 192.168.121.180:80>ServerName www.qq.comDocumentRoot /var/www/qq
</VirtualHost>
Listen 8080
<VirtualHost 192.168.121.180:8080>ServerName www.qq.comDocumentRoot /var/www/lol
</VirtualHost>
验证:
[root@moudle01 11:28:58 ~]# curl 192.168.121.180
wo shi qq
[root@moudle01 11:29:01 ~]# curl 192.168.121.180:8080
wo shi lol
[root@moudle01 11:30:10 ~]# curl www.qq.com:8080
wo shi lol
[root@moudle01 11:30:31 ~]# curl www.qq.com
wo shi qq