第20章存在疑问,待开学后和老师求证改动后发布
中间件之一——apache
先说一下http协议——超文本传输协议
全称为:Hyper Text Transfor Protocol
用途:让用户通过浏览器发送请求到服务器端,接收客户端返回的数据,在浏览器展示出来
http协议格式:
http://域名:端口号/路径/文件名
端口号默认为80;https端口号默认为443
客户端向服务端发送请求中的数据包:
http请求报文格式:
第一部分——第一行:GET开头请求行
请求行格式:
第一部分:
请求方法:GET、POST
第二部分:请求URL
第三部分:
所用的http协议版本号:
http 0.9
http 1.0
http 1.1
第二部分——第二行开始到一个空白行结束:请求头
请求头内容主要由键值对格式构成:
Host:主机头,表示向哪个网站发请求,后跟域名/ip
Connection:当前客户端的链接状态
User-Agent(UA头):指定客户端访问网站时使用的浏览器
refer:表示当前请求是直接访问过来的还是从其他网站跳转过来的,用于防盗链
第三部分——空白行下面:请求体
图例为(burp抓包工具抓取的百度的数据包)
请求行开头单词为GET,也有可能没有请求体
http响应报文格式:
第一部分——第一行:POST开头的响应行
响应行格式:
第一部分:http协议版本号
第二部分:客户端此次请求的状态码,通过这个状态码可以判断此次请求为成功还是失败
常见的HTTP状态码包括:
1开头的状态码一般为提示信息
200 OK:请求已成功,请求的数据包含在响应中。
201 Created:请求已完成并导致新资源的创建。
202 Accepted:表示请求已被接受,但处理尚未完成。
203(Non-Authoritative Information)表示服务器已成功处理了请求,但返回的实体头部元信息不是原始服务器的完整资源,而是其副本。
204 No Content:请求已成功处理,但没有内容返回。
301 Moved Permanently:请求的资源已被永久移动到新的URL。(永久重定向)
302 Found:请求的资源临时移动到新的URL。(临时重定向)
303 See Other:表示资源存在于另一个URI,且建议使用GET方法定向获取资源。
304 Not Modified:自上次请求后,请求的资源未修改过。(数据来自于缓存)
4开头表示本次请求失败原因在客户端
400 Bad Request:服务器无法处理请求,因为客户端的请求语法错误。
401 Unauthorized:请求需要用户验证。
402是一个非标准的状态码,通常不被广泛使用
403 Forbidden:服务器拒绝请求。(无权访问)
客户端请求的文件无权查看/客户端没有指定要访问哪个文件,且服务器默认展示给客户端的文件不存在
404 Not Found:服务器无法找到请求的资源。(客户端访问页面不存在)
5开头表示本次请求失败原因在服务端
500 Internal Server Error:服务器遇到意外情况,导致它无法完成请求。
501Not Implemented:这个状态码意味着服务器不支持请求中的功能,客户端应当检查请求的方法是否被服务器识别。
502 Bad Gateway:表示作为网关或者代理的服务器从上游服务器接收到无效响应。
503 Service Unavailable:服务器暂时无法处理请求,可能是因为过载或维护。
第二部分——第二行开始到一个空白行结束:响应头
第三部分——空白行下面:响应体
浏览器的开发者工具(网页按F12进入)可看到数据包的三种首部:
请求首部、响应首部、通用首部
响应首部信息:
Content-Type:返回的数据类型
http返回的数据类型有两种,分别为主类型和子类型,text为主类型,子类型为text中的html。text中的子类型有:JS、css、html
Date:返回时间
Server:从哪里返回的
通用首部信息:
请求URL、请求方法、请求结果
Remote Address:远程地址,图中443前中括号内是ipv6地址
Referrer Policy:strict-origin-when-cross-ongin(表示此网页无论是否有证书都只能通过域名访问,无法通过ip访问)/unsafe-url
apache
用于开启一个端口,等待客户端通过浏览器访问。
Linux中已内置apache
安装apache命令:
yum install httpd(软件包叫httpd)
在kali等其他系统中apache可能叫做apache2
检查系统是否安装apache命令:
rpm -q httpd
启动apache命令:
systemctl start httpd——临时启动
systemctl enable httpd——开机自动启动
查看apache状态:
systemctl status httpd
或查看端口检查apache状态(apache默认使用80端口):
ss -tunl | grep 80
或查看进程:
ps aux | grep httpd
检查哪个进程占用了指定端口:
lsof -i :80
检查连接80端口的进程:
ss -tunlp | grep 80
浏览器输入虚拟机ip测试apache是否启动:
页面如下,apache测试成功,正常启动
访问某个服务出现异常无法访问,排查步骤:
1、检查网络是否通畅,主机Win+R,执行cmd,ping一下虚拟机ip(网络通畅说明可以访问)
2、检查服务是否启动,上述查看状态命令,任意执行其一(服务启动说明可以被访问)
3、测试是否可以访问服务的端口(telnet):
Xshell中执行命令
telnet 虚拟机ip 服务对应端口
出现Connecting表示正在进行中还未连上
稍后若出现下图提示,表示连接失败
连接失败可能原因:
源ip(自己ip)被加入黑名单
目标主机开启防火墙,源主机数据包发送失败
验证是否是源ip被加入黑名单:换一个ip
4、如果换一个ip还是无法连接,说明目标主机开启防火墙
关闭防火墙
systemctl stop firewalld——临时关闭
systemctl disable firewalld——永久关闭
第一次关闭防火墙会有提示,属于正常现象:
关闭selinux(增强版安全控制软件能让系统更安全,但同时会让系统特难用)步骤:
打开对应的配置文件:/etc/selinux/config
改默认值为disabled:
查看此软件是否开启:getenforce,关闭的结果为Disabled
关闭的命令为:setenforce 0(临时关闭)
sed -i"s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config(永久关闭,同上述关闭步骤一样效果)
相关文件
配置文件:httpd.conf
日志文件:access.log(访问日志)、error.log(报错日志)
若使用yum安装apache,日志文件位于:/var/log/httpd;配置文件位于:/etc/httpd/conf
若使用编译安装apache,日志文件位于:安装位置下/logs/;配置文件位于:安装位置下/conf
配置文件中,此行意思为:加载目标位置下所有后缀为conf的文件
配置文件中的关键信息:(文件中有大小写,但实际不区分大小写)
ServerName(指定域名)
域名解析的优先级为本地缓存→hosts文件→dns(需要联网,且需要购买),如果这三种方式都解析不了域名,则会在cmd框中ping域名时,提示“请求找不到主机”等如下信息
hosts文件位于(此电脑):系统(C:)>Windows>System32>drivers>etc
hosts文件先拖到桌面,再打开编辑,写好后再放回原位
hosts文件自定义解析域名格式:
编辑好文件后,ping的结果:
DocumentRoot:指定网站根目录(启用selinux时,此路径不能随机更改)
Listen(监听)
要监听指定ip,将80改为指定ip;要监听所有ip,则不用更改/改为:80(加冒号)
更改后不会立刻生效,需要重启服务:systemctl restart httpd
注意:更改监听的端口号后,在浏览器中输入ip后需要加上英文冒号:再加上所改的端口号
此篇到此结束,谢谢各位阅读,如有不足,可评论补充,下篇见