Nginx反向代理和负载均衡
如果你是使用VM虚拟机 克隆出来的 需要更改以下参数
集群服务器部署: 集群中每台服务器的配置一模一样
01. 先部署好一台LNMP服务器,上传代码信息
02. 进行访问测试
03. 批量部署多台web服务器
04. 将nginx配置文件进行分发
05. 将站点目录分发给所有主机
lb01 192.168.1.4 #l两台可以实现高可用
lb02 192.168.1.5
LNMP01 192.168.1.8 #数据库部署在其它服务器上
LNMP02 192.168.1.10 #数据库部署在其它服务器上
1、四台服务器都要安装nginx服务(本次使用yum安装)
yum官方源安装方法:
第一个历程: 更新nginx官方yum源
#vim /etc/yum.repos.d/nginx.repo [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key
第二个历程: yum安装nginx软件
#yum install -y nginx
第三个历程: 启动nginx服务,检查服务是否安装正确
#systemctl start nginx
#systemctl enable nginx
测试访问nginx服务
2、两个 LNMP服务器 安装PHP
见LNMP安装 https://www.cnblogs.com/linux985/p/11769672.html
3、(反向代理)负载均衡的概念说明
什么是集群?
完成相同任务或工作的一组服务器 (web01 web02 web03 -- web集群)
什么是负载均衡?
1) 实现用户访问请求进行调度分配
2) 实现用户访问压力分担
什么是反向代理?
反向代理: 外网 ---> (eth0外网) 代理服务器 (eth1内网) ---> 公司网站服务器web(内网)
外网用户(客户端) --- 代理服务器 (服务端)
代理服务器(客户端) --- web服务器(服务端)
正向代理: 内网(局域网主机) --- (内网)代理服务器(外网) --- 互联网 --- web服务器(日本)
4、两台lb服务器配置
[root@lb01 ~]# cd /etc/nginx/ [root@lb01 nginx]# ls conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf [root@lb01 nginx]# cp nginx.conf{,.bak} [root@lb01 nginx]# grep -Ev '^$|#' nginx.conf
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; include /etc/nginx/conf.d/*.conf; }
[root@lb01 nginx]# grep -Ev '^$|#' nginx.conf.bak > nginx.conf [root@lb01 nginx]# [root@lb01 nginx]# cd conf.d/ [root@lb01 conf.d]# grep -Ev '^$|#' default.conf > lb.conf [root@lb01 conf.d]# mv default.conf default.conf.bak
ngx_http_upstream_module --- upstream 负载均衡 #具体配置可见官网
ngx_http_proxy_module --- proxy_pass 反向代理
[root@lb01 ~]# cat /etc/nginx/conf.d/lb.conf
upstream mxxl { server 192.168.1.8:80 max_fails=3 ail_timeout=10s; server 192.168.1.10:80 max_fails=3 ail_timeout=10s; } server { listen 80; server_name www.mxxl.com; location / { proxy_pass http://mxxl; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; } }
这几个的参数的作用是向后端转发的时候添加头信息; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 解释: proxy_set_header Host $host; #获取客户端真实求的主机(网址) 如果不设置客户端请求http://www.mxxl.com 会变成 http://mxxl proxy_set_header X-Real-IP $remote_addr; #表示将客户端的地址,加入到http请求头部中, 而不是代理服务器IP ; proxy_set_header X-Real-PORT $remote_port; #设置客户端真实端口 而不是代理服务器端口 X-Forwarded-For $proxy_add_x_forwarded_for:表示如果中间经过多级代理,则将所有代理的IP全部加入请求头部中; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; #出现这些错误会跳转到其它机器上
配置参数解释参考网址:https://www.jianshu.com/p/cc5167032525/
5、实现负载功能测试
搭建集群测试环境:
LNMP01: echo "LNMP01 192.168.1.8"> html/index.html
LNMP02: ech0 "LNMP02 192.168.1.10"> html/index.html
修改windows解析文件
192.168.1.4 www.mxxl.com
负载均衡访问网站异常排错思路
第一步: 负载均衡 测试后端web节点服务器是否能够正常访问
[root@lb01 conf.d]# curl -H host:www.mxxl.com 192.168.1.8
LNMP01 192.168.1.8
[root@lb01 conf.d]# curl -H host:www.mxxl.com 192.168.1.10
LNMP01 192.168.1.10
第二步: 负载均衡 利用curl命令访问负载均衡服务器 查看两个配置文件
第三步: 打开一个xshell连接 ping www.mxxl.com
第四步: 配置文件编写不正确
以下参考老男孩教育
6、负载均衡配置模块详细说明 ngx_http_upstream_module --- upstream
实现不同调度功能
1. 轮询分配请求(平均 默认)
2. 权重分配请求(能力越强责任越重)
upstream oldboy { server 10.0.0.7:80; weight=3; server 10.0.0.8:80; weight=2; server 10.0.0.9:80 weight=1; }
3. 实现热备功能(备胎功能,其它的都down机了 启用)
upstream oldboy { server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80 backup; }
4. 定义最大失败次数 健康检查参数
max_fails=5 #超过五次不再健康检查
5. 定义失败之后重发的间隔时间 健康检查参数
fail_timeout=10s #失败后10秒 会给失败的服务器一次机会 与上面次数合用
实现不同调度算法
1. rr 轮询调度算法
2. wrr 权重调度算法
3. ip_hash 算法 (出现反复登录的时候) # 方法一 ip_hash 算法 (有可能造成负载不均)方法二 当提交账号密码时(所以session一般存在缓存服务器)
4. least_conn 根据服务器连接数分配资源
7、反向代理配置模块详细说明 ngx_http_proxy_module --- proxy_pass
01. 访问不同的网站地址,不能显示不同的网站页面
proxy_set_header Host $host; #将代理服务器的请求头文件 http://oldboy 改成用的www.oldboy.com
02. 访问网站用户地址信息无法进行分析统计
proxy_set_header X-Forwarded-For $remote_addr; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP 方便日志查看分析
03. 访问负载均衡会出现错误页面,影响用户体验
proxy_next_upstream error timeout http_404 http_502 http_403;