1. web集群-HTTP协议
1.1. http概述
默认端口是80
HTTP超文本传输协议: 数据请求与响应.
- 传输:网站的数据如何传递给用户.
- 超文本:文本,图片,视频....
- 用户打开网站后:网站如何传递数据给用户.
- 专业名字:数据请求与响应.
请求request:打开网站,访问网站
响应response:网站显示出,返回给你想要的内容
curl -v jd.com
wget --debug jd.com
---request begin---
GET / HTTP/1.1
User-Agent: Wget/1.20.3 (linux-gnu)
Accept: */*
Accept-Encoding: identity
Host: jd.com
Connection: Keep-Alive
---request end---
已发出 HTTP 请求,正在等待回应...
---response begin---
HTTP/1.1 301 Moved Permanently
Date: Wed, 23 Oct 2024 06:41:19 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://www.jd.com
Server: jfe
Cache-Control: no-cache
---response end---
1.2. HTTP协议版本
http1.0 | http1.1 | http2.0 | http3.0(quic) | |
特点 | 短连接,每次请求都需要重复建立断开连接 | 加入长连接功能 | 增加并发,访问更快 | 基于udp更快,应用于流媒体 |
占用服务端资源 | keepalive功能(网站响应后不会立刻断开,保留下这个连接) | |||
是否加密 | http不加密的80https加密的443 | 默认基于https | ||
基于tcp/udp | tcp | tcp | tcp | udp |
现状:
大部分企业还在使用http1.1, 一部分使用http2.0
目前http3.0(QUIC) 流媒体直播在使用.
HTTP1.1 vs 2.0 速度对比:HTTP1.1/HTTP2 加载对比
1.3. HTTP协议详解
- HTTP请求报文(豹纹)
- HTTP响应报文(豹纹)
1.3.1. HTTP请求
---request begin---
GET / HTTP/1.1
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: www.baidu.com
Connection: Keep-Alive
---request end---
1.3.2. 请求报文起始行
请求方法: 用于指定客户端如何访问服务端(下载,上传,查看服务端信息)
常见请求方法 | 说明 |
GET | 下载(大部分请求) |
POST | 上传(上传文件内容,登录) |
HEAD | 类似于GET,仅仅输出响应的头部信息(查看服务端的信息,一般用与检查)curl -l |
DELETE | 删除 |
OPTION |
资源的位置(URI): 这个资源在网站站点目录的哪个地方,叫什么名字.
这里面写的/lidao.mp4,斜线并非是Linux系统的根目录.这个/叫网站的站点
目录.
URI(统一资源标识符)
站点目录是用于存放网站代码的地方.在nginx中我们可以指定与查看.
温馨提示:
GET /lidaoav.mp4 HTTP/1.1 这里的/不是根,是网站站点目录,未来可以在web服务中进行配置.
/app/code/www/ 站点目录
访问/lidaoav.mp4 === /app/code/www/lidaoav.mp4
1.3.3. 测试www.baidu.com是否可以通过http访问/
curl -I www.baidu.com
发出HEAD请求方法,查看服务端信息,服务端是否可以访问.
curl -I www.baidu.com
wget --method=HEAD --debug www.baidu.com
1.3.4. 请求头
字段(一些关键词) | 含义 |
User-Agent | UA头客户端代理(用什么工具访问网站),浏览器. |
Host | Host头表示访问的目标网站:域名或ip |
修改请求头
curl -A wei
或
curl -H User-Agent:weiwei
空行: 分割请求头与请求报文主体
请求报文主体(body): 一般上传的时候才有.
1.3.5. 浏览器调试查看
浏览器的调试功能:DevTools
F12或Fn+F12查看"网络"部分即可.
1.4. HTTP响应
状态码与服务端信息
协议与版本 HTTP/1.1
状态码: 数字3位,用于描述服务端是否能找到或处理用户的请求.(类似于命令行错误提示)
1.4.1. 响应头
响应头字段 | |
Server | 显示服务端使用的web服务器及版本 |
下面了解 | |
Content-Type | 媒体类型(文件类型) |
Content-Length | 大小 |
Location | 跳转之后的新的位置(未来讲解rewrite 301/302),跳转的时候才有 |
Via/Cache | 查看是否经过cdn. |
1.5. http请求与响应详细流程
1.6. http协议状态码
状态码: 错误提示,反映出服务端是否能够正常的处理用户请求.
状态码 | 含义 |
2xx | 表示正常 |
3xx | 表示需要进行跳转,表示正常 |
4xx | 表示异常,客户端问题 |
5xx | 表示异常,服务端问题 |
详细的状态码 | 说明 |
200ok | 访问正常 |
301Moved Permanently | 永久跳转 |
302Found/Moved Temporarily | 临时跳转 |
304Not Modified | 浏览器缓存 |
401 | 认证失败 |
403Forbidden | 权限拒绝(拒绝访问)权限问题,首页文件问题 |
404Not Found | 文件找不到,一般辅助错误日志排查 |
405Method Not Allowed. | 不准许的请求方法,一般服务器或安全软件限制 |
413 request entity too large | web服务的文件大小限制 |
500Internal Error | 网站内部错误,SElinux开启,其他原因一般辅助错误日志排查 |
502Bad Gateway | 网关错误,一般发生在负载中(类似场景下),请求发送到后面,无人处理,提示502 |
503 service temporarily unavailable | 服务临时不可用,后端负载异常等情况人为设置-升级 |
504 Gateway Time-out | 网关超时 |
curl -Lv -L跟随跳转,遇到301/302会读取响应头中的Location头重新访问
2. nginx
2.1. web服务
WEB服务: 网站服务,部署并启动了这个服务,你就可以搭建一个网站.
WEB中间件: 等同于WEB服务
2.2. 常见网站服务(web中间件)
网站服务 | 说明 | 官网 |
通过WEB中间件 | ||
Nginx | 大部分使用nginx,Enginex 异步模型(epoll) | nginx documentation |
Tengine | 基于Nginx二开,淘宝开源, 更多内置模块 | The Tengine Web Server |
Openresty | 基于Nginx二开,加强Lua 功能与模块 | |
apache(httpd) | 目前较少使用. select模型 (同步) | |
…… | ||
特殊环境 | ||
Tomcat/Jboss/Jetty/Weblogic | 运行java环境的,web服务 | |
PHP | 运行php环境,需要ngx(LNMP) | |
Python/Golang. | ||
信创(国产化) |
2.3. 上手nginx
记录常用服务的版本: 1.16.x 1.18.x
选用稳定版本,上一个稳定版本.
rpm -qa |grep nginx
[root@web01 ~]# cat /etc/yum.repos.d/ngx.repo
name=nginx stable repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true systemctl enable --now nginx systemctl status nginx ss -lntup |grep nginx ps -ef |grep nginx curl 10.0.0.7 curl -v 10.0.0.7 浏览器访问: http://10.0.0.7:80/
2.4. 目录结构
Nginx不同的安装方法:目录,文件会有所区别.
下面是yum/apt安装默认的路径.不同系统会有差异.
编译安装的ngx就不同了.
目录结构 | 说明 |
/etc/nginx/ | nginx各种配的目录 |
/etc/nginx/nginx.conf | 主配置文件 |
/etc/nginx/conf.d/*.conf | 子配置文件(网站),如果没有手动创建conf.ddefault.d 子配置文件 |
/etc/nginx/conf.d/default.conf | 默认的子配置文件 不一定存在. |
/usr/sbin/nginx | ngx命令 |
/usr/share/nginx/html/ | ngx默认的站点目录,网站的根目录(可以通过 查看配置得知) |
/var/log/nginx/ | ngx日志:访问日志,错误日志,跳转日志 |
其他目录和文件 | 说明 |
/etc/logrotate.d/nginx | 日志切割(防止文件过大) |
/etc/nginx/mime.types | 媒体类型 |
/etc/nginx/fastcgi_params | ngx+php |
/etc/nginx/uwsgi_params | ngx+python |
/usr/lib/systemd/system/nginx.service | systemctl配置文件 |
/var/cache/nginx/ | 缓存目录 |