我们就以nginx1.20.1版本举例(epel源目前默认下载的版本)
目录
nginx的两种配置文件
第一种全局配置文件:/etc/nginx/nginx.conf 默认位置
虚拟主机配置文件:/etc/nginx/conf.d/*.conf 扩展配置文件文件夹 后缀一定要是.conf ,注意了这个版本conf.d目录下不在有默认配置文件了。(旧版本都有)
可修改配置文件位置(/etc/nginx/nginx.conf 修改)
全局配置文件的优化
不建议大量修改全局配置文件,有些优化可以写在扩展配置文件内(下面会说到)
我们打开nginx全局配置问价查看一下:
vim /etc/nginx/nginx.conf
worker_processes * worker_connections =这个服务器最大的并发请求
优化:
我在event 事件驱动的地方加入了一个 use epoll 模型 详细请看图片 加入这个字段记得在结尾处加上';' 号
worker_connections 4096; 我改为4096个
这里做一个安全,nginx隐藏版本号
将以下这条加入到http的字段内 实现不显示版本号
server_tokens off; #关闭版本号显示
接下来我们做个对比,没有隐藏版本号
命令用 curl -i 显示头部信息
隐藏后:
全局配置文件其他配置含义:
include /etc/nginx/mime.types; 迷你加密模块 用来做配对密钥加密签名使用的 (公钥加密私钥签名)
default_type application/octet-stream 支持的数据类型 (应用程序,群集模式都支持)
log_format main 定义日志格式
access_log /var/log/nginx/access.log main; 日志存放位置和格式
sendfile on; 发送大文件 默认开启
开启缓存池:
proxy_buffering on; #启用缓存池
proxy_temp_path /usr/local/nginx/proxy_temp; #临时文件位置 这里的目录要自己创建
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m inactive=600m max_size=2g;
配置内容解析:proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m inactive=600m max_size=2g;
levels=1:2 1:2 表示建立的目录 一表示一级目录 二表示二级目录
keys_zone=my-cache:100m(定义缓存池名字大小100兆)
inactive=600m(活跃600兆)
max_size=2g(最大2GB)
切记这个缓存目录一定要在程序账号目录下(/usr/local/nginx),其他目录可能出错
添加位置:
Nginx缓存是键值存储,URL是键,文件路径是值。键值存储的速度就是加快在文件系统中查找的速度。所以,存储的key是哈希过的值。
nginx缓存的好处:
1、减轻服务器负载
2、提供网页响应效率
3、降低网络阻塞,增强网络可扩展性
为什么使用缓存?
1、服务器处理能力以及负载能力出现瓶颈,响应效率大大降低
2、为了减少网络传输延迟,提升响应效率
3、能够避免因为后端服务器出现异常以及网络故障,客户端请求数据副本能够及时响应
nginx负载均衡几种参数
算法通常写在upstream字段内
sticky算法:是nginx的一个模块,它是基于cookie(状态信息)的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上
写法:直接在upstream字段内第一行写入 sticky;
weight 权重参数:加权轮巡,权重值越高就越优先访问
写法:在server ip 后面加上weight=1; 1代表权重值为1。
backup参数:备用web节点,比如当配置群集的web节点全部宕机,那么就会启用备用节点来继续保持。通常情况的访问不会直接访问备用节点。
写法:在server ip 后面加上 backup;
ip_hash 哈希参数:用户ip第一次访问的是那台web节点,下一次访问还是相同节点。
写法:upstream字段内第一行加入
如果没有参数表示,轮巡,一个一个轮着来
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后,服务的暂停时间
max_conns 同一ip最大连接数、
down当前节点服务器不参与负载均衡
写法:
nginx扩展配置文件参数与优化
我们首先创建一个nginx优化文件,文件内容如下 我们在全局配置文件nginx.conf中开启了缓存池名字就叫 my-cache 写好这个文件就可以一直用
cat > /etc/nginx/nginx_params <<EOF
proxy_cache my-cache;
add_header Nginx-Cache $upstream_cache_status;
proxy_cache_valid 200 304 301 302 8h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1d;
proxy_cache_key $host$uri$is_args$args;
expires 30d;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
EOF
优化参数详情:
proxy_cache my-cache; 我的代理缓存 my-cache 这里使用的缓存名字
add_header Nginx-Cache $upstream_cache_status; 群集缓存状态
proxy_cache_valid 200 304 301 302 8h; 访问成功的信息 保存8h 8小时
proxy_cache_valid 404 1m; 错误信息缓存 保存1分钟
proxy_cache_valid any 1d; 其他信息缓存一天
proxy_cache_key $host$uri$is_args$args; 缓存键值
expires 30d; 默认缓存超时时间为30天
proxy_pass http://web; #是代理转发的意思
proxy_set_header Host $http_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_connect_timeout 30; #代理和后端服务器连接超时时间
proxy_send_timeout 60; #后端服务器传回代理的超时时间
proxy_read_timeout 60; #代理等待后端服务器的响应时间
proxy_buffering on; #启用缓存,后端返回内容先缓存,再给客户端,收到多少转多少
proxy_buffer_size 32k; #代理缓存用户头信息的缓存区大小
proxy_buffers 4 128k; #缓存区的设置
proxy_busy_buffers_size 256k; #从proxy_buffers划出一部分缓冲区来专门向客户端传送数据的地方
proxy_max_temp_file_size 256k; #超大的响应头存储成文件。
我们在/etc/nginx/conf.d/下写入一个负载均衡的配置文件 名字就位lb.conf了
cd /etc/nginx/conf.d && vi lb.conf
upstream web {
server 172.16.1.10 max_fails=2 fail_timeout=10s max_conns=1;
server 172.16.1.11 max_fails=2 fail_timeout=10s max_conns=1;
}
server {
listen 80;
server_name www.test.com;
index index.html index.htm;
location /{
root html;
proxy_pass http://web;
include nginx_params; #这个地方代表引用刚才我们设置的优化的参数文件
}
}
我们用nginx自带命令检查我们的配置文件是否有问题
nginx -t
没问题后重启nginx
systemctl restart nginx.service
尝试访问然后尝试:
这里一直一个ip地址没有轮巡起来 是因为缓存池 将ip缓存到了目录下 来提高访问速度
查看日志默认的位置在: /var/log/nginx/access.log
追踪查看日志:
tail -f 50 /var/log/nginx/access.log
上图日志内显示的是:nginx负载均衡服务器的ip地址
上图是日志内显示我访问的客户端ip地址以及时间用的命令是curl命令
总结
nginx优化,总的来说就是将工作进程和每个进程的接收客户端请求量,改大,添加epoll模型,设置超时时间,设置缓存池,针对性能较好的服务器加权轮巡,并且设置请求失败的时间和次数,还有设置ip最大连接数。