1、简述HTTP交互原理
1、浏览器分析输入访问的地址 域名(IP)+$uri
2、读取浏览器缓存
3、请求DNS服务器,解析域名,返回IP
4、建立TCP连接,三次握手
5、发送请求
6、接收返回请求
7、结束,四次挥手
PS: http1.0 请求一次,建立一次连接,返回一次
http1.1 建立连接后,请求多次,请求一次,返回一次次
http2.0 同步多次请求,建立连接,同步多次返回
2、实现一个Nginx热部署
Nginx回启动 master 进程 和 worker 进程,worker 进程是真正处理请求的进程,是 master 进程的子进程。
Nginx 的热部署是因为 master 进程的关系,当通知 ngnix 重读配置文件的时候,master 进程会进行语法错误的判断。如果存在语法错误的话,返回错误,不进行装载;如果配置文件没有语法错误,那么 ngnix 也不会将新的配置调整到所有 worker 中。而是,先不改变已经建立连接的 worker,等待 worker 将所有请求结束之后,将原先在旧的配置下启动的 worker 杀死,然后使用新的配置创建新的 worker。
获取旧版本、编译参数
nginx -v
安装目录
whereis nginx
which nginx
下载新版本
cd /data/nginx_new
wget http://nginx.org/download/nginx-1.20.1.tar.gz
解压编译
tar -zxvf nginx-1.20.1.tar.gz
cd nginx-1.20.1
.configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
--with-http_ssl_module --with-http_flv_module \
--with-http_stub_status_module --with-http_gzip_static_module \
--with-http_realip_module --with-openssl=/opt/openssl-1.0.2r \
--with-stream --with-stream_ssl_module # 编译参数参照旧的参数
make # 只编译不安装,不执行make install,编译后的nginx文件在/objs/目录下
备份旧程序
mv /usr/sbin/nginx /usr/sbin/nginx.old
替换新程序
cp -a /data/nginx_new/nginx-1.20.1/objs/nginx /usr/sbin/nginx
发送USR2信号给旧版本主进程号,旧版本停止接收请求,新版本接替,且老进程处理完所有请求,关闭所有连接后,停止
kill -QUIT cat /var/run/nginx/nginx.pid.oldbin
旧服务版本号存在pid目录的nginx.pid.oldbin里
ls -l /var/run/nginx
...
nginx.pid
nginx.pid.oldbin
...
关闭旧进程
kill -QUIT cat /var/run/nginx/nginx.pid.oldbin
查看运行版本
nginx -v
3、搭建一款Wordpress博客系统
4、简述对称加密与非对称加密
对称加密
使用相同的秘钥进行加/解密
非对称加密
a生成一对秘钥,公钥和私钥,公开公钥给其他人,保留私钥。
其他人使用公钥对数据进行加密,传送给a;
a使用私钥进行解密。
5、实现一个keepalive高可用测试
keepalived 安装配置
yum安装
yum -y install keepalived
查找位置
whereis keepalived
cd /etc/keepalived/
修改原配置
mv keepalived.conf keepalived.conf_bak
查询、安装、开机启动
systemctl status keepalived
systemctl start keepalived
systemctl enable keepalived
keepalived 配置
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_script chk_http_port {
script "/etc/keepalived/nginx_pid.sh" # nginx检查脚本地址
interval 3
weight -10
}
global_defs {
router_id master_node # 本节点的名称,备节点配置为 backup_node
}
vrrp_instance VI_1 {
state MASTER # MASTER为主实例,BACKUP 为从实例
interface eth0 # 网卡名称
virtual_router_id 51 # 主备这里要配置为同样的
mcast_src_ip 172.16.0.2 # 本机IP,主备的unicast_peer的IP正好相反
unicast_peer {
172.16.0.3 #(对端IP地址)此地址一定不能忘记,vrrp need use
}
priority 105 # 优先级,主要高于备. 主配置为100 备配置为95
advert_int 1
authentication {
auth_type PASS # 主备必须配置成同样的
auth_pass keepalived_node # 主备必须配置成同样的
}
virtual_ipaddress {
172.16.0.100 # vip,主备必须配置一样
}
track_script {
chk_http_port # nginx进程检测脚本
}
}
nginx监测脚本
cat /etc/keepalived/nginx_pid.sh
#!/bin/bash
NGINX_PROCESS=`ps -C nginx --no-header | wc -l`
if [ $NGINX_PROCESS -eq 0 ];then
/usr/local/nginx/sbin/nginx # 尝试重启nginx服务
sleep 2 # 等待2秒
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
systemctl stop keepalived #如果启动失败,停止keepalived,节点自动转到其他节点
fi
fi