Linux网络服务
1.http协议版本
2.http请求
请求头
- HTTP: 用户的请求与响应被后格式与定义
- HTTP请求豹纹
请求起始行: GET / (uri) HTTP/1.1
请求头(head):
User-Agent: 客户端代理(浏览器)
Host: 域名
空行
请求豹纹主体(body): POST
- HTTP响应报文
响应报文的起始行: HTTP/1.1 状态码
响应头: Server(web服务器)
空行
响应豹纹的主体(body): 文件内容
- 状态码
3.web服务
- WEB服务:网站服务,部署并启动了这个服务,你就可以搭建一个网站.
- WEB中间件: 等同于WEB服务
- 中间件:范围更加广泛,指的负载均衡之后的服务.
- 数据库中间件:数据库缓存,消息对列
4.Ngx处理用户请求流程
目录结构
主配置文件详解
子配置文件
Nginx处理用户请求流程
使用域名访问网站流程:
(1)DNS解析:域名-->IP地址
(2) 连接80端口: tcp3次握手与网站的80端口建立连接
(3)http请求豹纹:请求方法,URI,HOST等信息
- GET /index.html
- HOST: cxk.oldboylinux.cn
- User-Agent: Chrome/xxx
(4)ngx处理:
- http请求,http区域处理
- 不同的server{} 区域(子配置文件)处理.
- 端口
- 域名:用户请求的域名与子配置文件server_name进行匹配.
- 匹配成功,就让对应的子配置文件(server{})处理
- 根据子配置文件的,root,location规则,index进行处理查找文件.
- 把找到的文件发回给用户.
(5)http响应豹纹:
- 状态码:200 ok
- server信息
- 其他信息
- 文件内容
(6)客户收到文件内容,浏览器解析,进行展示.
5.虚拟主机
12。访问格式
13.负载均衡选择
13.LNMP
LNMP原理(动态,静态)
LNMP搭建流程
MariaDB
(查看所有的库,查看所有的用户;)
(创建库,创建用户;)
PHP(会修改PHP运行的用户)
Ngx(配置转发规则)
LNMP排错流程.
testinfo.php 检查ngx能否把动态请求转发给php,php能否解析.
testmysql.php 检查php代码是否能够以指定的用户,密码,连接指定的库.
代理:
proxy_pass指令:把用户的请求转发到指定的节点.
proxy_set_header 指令:用于修改代理向后端节点发出请求的时候 请求头 .
14.负载均衡 vs 反向代理
15.轮询算法
16.HA高可用服务
- keepalived是基于VRRP协议实现高可用.
- VRRP虚拟路由器冗余协议,最开始是给网络设备实现高可用.目前keepalive实现vrrp协议,通过vrrp实现高可用.
- 分为主,备一般是2个节点.主备之间通过vrrp协议发送数据包沟通.
- 主给备定期发送数据包,备收到数据包表示主还活着,备无法收到数据包,表示主挂了,备胎转正了,接管用户请求流量.
- vrrp协议使用组播的ip. 224.xx.xx.xx
keepalived配置文件分类
17.脑裂故障
现象:主备都有vip.
原因:
- 备认为主挂了,接管资源生成VIP.实际上主并没有挂,仍有VIP.
- 有很多原因可以导致脑裂,开启防火墙,selinux,keepalived配置,物理线路.
解决:
- 监控(备节点监控),只要备节点有vip就告警.
- 更狠一点监控备节点只要有vip,远程控制主节点,只要备节点认为主挂了,那就让他真的挂了.
18.案例-keepalived基于主机高可用软件
- keepalived只会在主机挂了,网络断开后,才会进行主备切换.
- 默认情况下keepalived不会监控某个服务.
- 项目目标: 某个服务关闭了,keepalived就进行主备切换.
项目步骤:
- 老男孩教育-王牌VIP班书写脚本,过滤服务进程数,端口数量,检查是否运行.
- 然后进行判断如果服务没有运行,则关闭keepalived.
- 修改keepalived配置文件,通过keepalived调用这个脚本.
小结
- 书写脚本: 获取服务端口数/进程数,通过if进行判断,如果端口或进程数为0,则关闭keepalived.
- 修改keepalived配置:
- 定义脚本 vrrp_script 名字 { script 脚本路径与名字 ....}
- 调用脚本 vrrp_instance中通过track_script
- 调试
19.非抢占模式
- keepalived 主备默认是抢占式,主挂了,备接管.主恢复,不希望主重新抢回资源.
- 配置非抢占式模式即可.
使用流程
- 1. 2个节点状态是备
- 2. 配置nopreempt选项
20.双主模式
应对高并发的时候设置的双主模式.
21.Java容器
- JVM: java 虚拟机中,运行java代码的地方.
- JRE: java Runtime Enviroment java运行环境 . 提供jvm环境,java命令.
- JDK: Java Development Kit java开发环境 , jvm+jre+额外功能
22.Java应用负载高排查方法
23.Java会话共享方案
24.
前端,后端下载的代码是源代码
前端代码需要编译,nodejs环境编译-->静态资源(html,css,js)-->nginx中.
后端代码java, 通过maven/gradle编译-->war包/jar包 运行
25
26.常见动态网站的架构
- PHP: LNMP(LEMP), LAMP, WNMP/WAMP (PՎՎʖPHP,WՎՎʖWindows,AՎʔApache)
- Java: LNMT(Tomcat,Jetty,Weblogic,Jboss)
- Python: LNMP(Python,uwsgi)
- Golang: LNMG(Golang)
- C/CՎҡ: LNM?........
27.LNMP处理动态请求流程
28.LNMP排错
- 排除法.
- Linux:防火墙,selinux.
- Nginx:检查配置,处理流程检查. 测试ngx.
- PHP:处理动态请求. 测试:ngx+php
- MySQL: 测试php+数据库
- 老男孩教育-王牌VIP班背景:ngx部署wordpress(php)站点报错了,说说排查流程.
- 步骤:
- 1. 检查ngx是否正常运行.
检查端口
检查进程
检查配置
站点目录下面创建 test.html 写入内容
curl 访问
- 2.ngx是否把动态页面转发php,php是否解析.
站点目录下 testinfo.php <?php phpinfo(); ?> 测试完成,务必删除,否则网站信息泄漏
- 3.检查php连接数据库是否正常(测试数据库用户名和密码)
29.负载均衡选型
- upstream模块,upstream指令实现负载均衡.创建分组/池塘,proxy_pass中使用即可.
[root@lb01 /etc/nginx/conf.d]# cat lb.oldboylinux.cn.conf upstream lb_pools { server 10.0.0.7:80; server 10.0.0.8:80; } server { listen 80; server_name lb.oldboylinux.cn; error_log /var/log/nginx/lb-error.log notice; access_log /var/log/nginx/lb-access.log main; location / { proxy_pass http:Վˌlb_pools; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
30.Nginx处理用户请求流程-静态-无负载
31.Nginx处理用户请求-含负载均衡
https://www.processon.com/view/link/619d93310e3e74287fe4e3de
32.Nginx平滑升级
33.Nginx重定向
(1)return
- return + 状态码 与 location 或 if.
- 实现跳转
- 返回指定的状态码.
- 域名跳转(新旧域名)
- httpՎՎʖhttps跳转
(2)if判断
- if用于进行判断,通过ngx中变量.
- 可以比大小.
- 也可以进行等于,不等于.
- 也可以进行匹配(过滤).
设置网站是否为维护状态:如果维护状态:返回503状态码,否则正常访问.
流程
- 设置标记$flag 默认是0.
- 判断如果$flag的值是1则网站返回503
(3)rewrite
- rewrite正则用于匹配用户请求的uri.
- 命令的格式与sed 's###g' 类似,实现替换功能,rewrite替换url内容.(改写)
rewrite各种标记
34.https
- 基于http协议,传输的时候进行加密.
- 如果不使用https,数据传输都是明文的.
- 应用场景:
- 目前大部分的业务都是使用https加密.
- 企业想使用http 2.0 基于https.
- 部署https加密的流程
- 域名 *.jd.com www.jd.com
- 根据域名申请https证书(私钥与公钥(ca证书)),自己创建.
- 进行配置web/lb.
35.网站集群https配置
36.
37.tomcat目录结构
38.书写systemctl管理配置文件进行管理
- 服务管理指令.
- 存放在/usr/lib/systemd/system/xxxx.service
- 分为3个部分.
- 修改或设置systemctl配置要进行重新加载配置
39.运行代码
40.配置文件
规范tomcat访问日志格式
41.to'mcat+ngx架构
(1)没有使用动静分离
(2)动静分离
42.命令
(1)jps
jps-->java ps 命令,只显示java进程. 类似于 ps -ef |grep java
(2)jstack
jstack查看java进程内部信息,线程信息.
进程: 占空间,占系统资源,厂房.
线程: 厂房里面的工人,处理与用户的请求.
需要代码使用多线程技术. 通过ps aux 查看进程是否支持线程(是否使用多线程技术)
(3)jmap
jmap查看或导出jvm信息
查看jvm使用情况
(4)mat分析工具
jvm内存映像文件,在windows/mac/ubuntu系统下通过MemoryAnalyzer Tool (MA/MAT)
1. 需要jdk环境
2. 软件包解压即可使用
3. MemoryAnalyzer.exe
43.tomcat安全优化