综合架构-技术点串线:www.processon.com/view/link/6...
访问密码:oldboylidao996
Ngx处理用户请求流程:www.processon.com/view/link/6...
LNMP架构处理流程:www.processon.com/view/link/6...
一、LNMP排错
排除法:
Linux:防火墙,selinux.
Nginx:检查配置,处理流程检查. 测试ngx.
PHP:处理动态请求. 测试:ngx+php
MySQL: 测试php+数据库
背景:ngx部署wordpress(php)站点报错了,说说排查流程.
1、检查ngx是否正常运行.
perl
检查端口
ss -lntup | grep nginx
检查进程
ps -ef | grep nginx
检查配置
nginx -t
站点目录下创建test.html写入内容,使用curl访问
curl IP:/80
2、ngx是否把动态页面转发php,php是否解析.
php
站点目录下
testinfo.php
<?php
phpinfo();
?>
测试完成,务必删除,否则网站信息泄漏.
3、检查php连接数据库是否正常(测试用户名和密码)
ini
#推荐方式
mysql -u用户 -p密码 -h 数据库的ip
show databases;
二、复杂均衡和代理
1、代理概述
- 代理: 外卖/中介/中间商. 用户无法直接做某些事情,通过中介进行处理.这个中介就是代理.
- 用户 代理 WEB节点,后面只有一个节点,一般使用的是ngx代理功能即可,后面如果是集群需要使用ngx负载均衡功能.
2、代理分类
代理分类 | 方向 | 应用 |
---|---|---|
正向代理 | 用户(服务器)->代理->外部(某网站) | 服务器通过代理实现共享上网/访问某个网站 |
反向代理 | 用户(app/浏览器)->代理->网站服务器(WEB) | 给网站设置个统一入口,后面是网站集群(可以使用负载均衡功能) |
1)正向代理
2)反向代理
3、案例:反向代理案例
1)后端web服务器
1、编辑ngx配置文件
ini
[root@backup conf.d]# cat /etc/nginx/conf.d/shishu.com.conf
server{
listen 80;
server_name shishu.com;
root /app/code/shishu;
location / {
index index.html;
}
}
2、检验语法nginx -t
3、创建对应目录和文件,并且更改所有者
bash
mkdir -p /app/code/shishu
touch index.html
echo "This is the interface after redirection" > /app/code/shishu/index.html
chown -R nginx.nginx /app/code/shishu
mkdir -p /app/code/html
touch index.html
echo "index.html" > /app/code/html/index.html
chown -R nginx.nginx /app/code/html
4、重启加载ngx服务
systemctl restart nginx
5、本地测试
ruby
curl -v -H Host:shishu.com 10.0.0.13
2)前端负载均衡服务器
1、编辑ngx配置文件
ini
[root@clb conf.d]# cat /etc/nginx/conf.d/shishu.com.conf
server{
listen 80;
server_name shishu.com;
root /app/code/shishu;
location / {
proxy_pass http://10.0.0.13:80;
proxy_set_header Host $http_host;
}
}
2、检验语法nginx -t
3、重启加载ngx服务
systemctl restart nginx
4、测试代理
ruby
curl -v -H Host:shishu.com 10.0.0.12
3)抓包查看
可以看出进行的两次跳转
4、web有多个虚拟主机故障案例
故障现象:
- web服务器有多个虚拟主机的时候,通过代理访问web出现异常.访问的不是我们想要的虚拟主机·
原因:
- 代理向后端web节点发出请求的时候,请求头中的Host,被修改成ip地址形式了
- 相当于代理通过ip地址访问web服务器,只显示默认虚拟主机
解决:
- 方向:修改代理->web的请求头
proxy_set_header Host $http_host;
解决的原理:
- 代理->web发出请求的时候,修改请求头中的Host部分,设置为用户请求的域名
模拟:
注释proxy_set_header Host $http_host;
,模拟访问到web服务器的默认html。
proxy ngx模块
proxy_pass :传球,请求传递给指定的节点
proxy_set_header : 修改请求头,代理->后端节点
5、web记录真实IP
现象:在代理服务器01是客户端,在web服务器上lb是客户端。
在代理服务器增加改ngx的location , proxy_set_header X-Forwarded-For $remote_addr
; 。最后在web服务器上记录了真实的ip地址。
6、负载均衡
- upstream模块的upstream指令
- 创建1个池塘(分组),存放主机
- upstream创建池塘,proxy_pass数据丢向池塘
对LB配置文件进行更改
ini
[root@clb conf.d]# cat /etc/nginx/conf.d/shishu.com.conf
upstream cfg_pools {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server{
listen 80;
server_name shishu.com;
root /app/code/shishu;
location / {
proxy_pass http://cfg_pools;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
遗留:day47 and 48
总的来说,反向代理主要关注于隐藏服务器的内部结构、提供安全性和缓存等功能,而负载均衡则主要关注于平衡服务器的负载、提高系统的性能和可用性。虽然它们在某些方面有重叠,但是它们的主要功能和使用场景是不同的。