knight_ka | 生活及学习笔记

Nginx5-Nginx的代理配置

Nginx的负载均衡和反向代理配置以及优化

传统实现负载均衡的方式:

1.用户自己选择。如:下载文件时,选择不同的节点去下载。

2.DNS轮询,域名解析商配置多条a记录,在dns轮训的时候就会找到这些a记录随机选择一个进行访问。
成本低
可靠性差:如果有一台a记录中的服务器宕机了,所有访问这台服务器的用户都得不到响应了,各地区的宽带商基本都将dns放入缓存中的,就算你取消了这台ip的机器,也许需要几小时,也许更久才能生效。
负载分配不均衡:简单的轮询负载算法,不能区分服务器的状态差异。假如用户访问到了a的ip,这个ip就会加入本地的计算机缓存中,一段时间内该用户都会去访问这个ip。

OSI 4/7层模型:
物理层
数据链路层
网络层
传输层
会话层
表示层
应用层

3.现代负载均衡技术通常操作于传输层(配置VIP,然后在虚拟ip和真实ip之间进行映射)和应用层(根据http抱头信息来执行负载均衡任务)

1.硬件负载均衡设置:如F5 BIG-IP等 都价值不菲。
2.软件四层负载均衡:LVS 作者章文嵩-目前在淘宝
3.软件七层负载均衡:nginx/L7SW/HAProxy

Nginx负载均衡配置

nginx
nginx

Proxy_connect_timeout 跟后端服务器连接的超时时间 发起握手 等待响应时间

proxy_read_timeout 连接成功后等待后端服务器响应的时间

Proxy_send_timeout 等待后端服务器数据回传的时间—在规定时间内返回所有的数据

Proxy_buffer_size 代理请求缓存区,保存请求的头信息进行规则处理

Proxy_buffers 4 32k; 告诉nginx保存单个用的几个buffer 最大多大空间

Proxy_busy_buffers_size 64k;如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2

Proxy_temp_file_write_size proxy缓存临时文件的大小

upstream指令用于设置一组可以在proxy_pass中指定的代理服务器。默认的负载均衡方式是轮训,可以在upstream上流中添加各个服务器名称 及参数(权重等)
服务器名称可以使ip 域名 端口号 及 UNIX Socket

Proxy_set_header可以指定Header传递到后端服务器
通过set一个header X-Forwarded-For $remote_addr 让后端知道请求的ip是哪个ip。
一般要重写两个请求头:Host 请求的主机名(如果不写,默认为nginx的主机名)。
x_forward_for 客户端的ip地址,如果不重写,默认为nginx的ip。

Nginx可以实现动静分离。

Nginx的upstream模块

nginx

Upstream模块是nginx的主要模块,他提供了简单方法来实现轮询和客户端ip之间的后端服务器负载均衡,并对后端服务器实现健康检查。

Ip_hash none;默认none。当对后端多台服务器进行负载均衡时,使用ip_hash指令能够使某个客户端ip通过hash算法指定到同一台后端服务器上,可以保证一个用户访问的是同一个服务器。

server参数:
server servername [参数1,参数2]
参数列表:
nginx

nginx双机高可用,可用keepalived配置。

Nginx的主配置文件nginx.conf优化:

1.worker_processes 1; 每个进程耗费10M-12M内存,启动的进程数越少,越节省内存。

2.对网页文件、css、js、xml等启动gzip压缩,减少数据传输量,提高访问速度。

3.图片视频等文件添加浏览器缓存。并用proxy-cache缓存静态资源到nginx本地服务器。

4.js css等文件设置浏览器缓存