优化Nginx服务器的技巧简介
优化 worker 进程与连接数
1、worker 进程数:Nginx 的 worker 进程是处理客户端请求的关键组件,默认配置通常为一个或少数几个 worker 进程,这可能无法充分利用多核 CPU 的处理能力,为了优化 worker 进程数,应根据服务器的 CPU 核数来设置,每个 worker 进程可以绑定到一个 CPU 核,以最大化并行处理能力,在 Nginx 的配置文件/etc/nginx/nginx.conf
中,可以使用worker_processes auto;
自动检测 CPU 核数,并为每个核分配一个 worker 进程。
2、worker_connections 参数:每个 worker 进程处理的连接数也会影响 Nginx 的性能。worker_connections
参数决定了每个 worker 进程能处理的最大连接数,这个值应该根据服务器资源和预期负载来设置,将worker_connections
设置为 1024,意味着每个 worker 进程最多可以同时处理 1024 个连接。
3、最大并发连接数计算:通过公式最大并发连接数 = worker_processes * worker_connections
,可以计算出 Nginx 能处理的最大并发连接数,如果有 4 个 worker 进程,每个进程处理 1024 个连接,Nginx 可以处理 4096 个并发连接。
启用与优化缓存
1、定义缓存路径:在 Nginx 配置文件中使用proxy_cache_path
指令定义缓存路径。
“`nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
“`
/var/cache/nginx
是缓存文件存储的路径,levels=1:2
决定了缓存目录结构,keys_zone=my_cache:10m
定义了缓存区域及其大小,inactive=60m
指定了未被访问的缓存内容在 60 分钟后过期,max_size=1g
限制了缓存区域的最大大小为 1GB。
2、启用缓存:在 server 或 location 块中启用缓存。
“`nginx
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_bypass $http_cache_control;
}
“`
proxy_cache my_cache
启用了先前定义的缓存区域,proxy_pass http://backend
指定了代理的后端服务器,proxy_cache_bypass $http_cache_control
用于控制在特定条件下跳过缓存。
3、设置缓存时间:使用proxy_cache_valid
设置缓存时间。
“`nginx
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
“`
这意味着状态码为 200 或 302 的响应将被缓存 10 分钟,而状态码为 404 的响应则缓存 1 分钟。
4、使用过期缓存:使用proxy_cache_use_stale
指令,在后端服务器不可用时使用过期的缓存。
“`nginx
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
“`
这样,即使后端服务器宕机或超时,Nginx 仍然可以为客户端提供缓存的内容,从而提高可用性。
1、启用 gzip 压缩:在nginx.conf
文件中添加以下配置以启用 gzip 压缩:
“`nginx
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1024;
gzip_comp_level 5;
gzip_vary on;
“`
gzip on
启用 gzip 压缩,gzip_types
指定要压缩的 MIME 类型,gzip_min_length
设置响应体的最小长度,只有超过这个长度的响应体才会被压缩,gzip_comp_level
设置 gzip 的压缩级别,gzip_vary on
使 Nginx 添加 Vary: AcceptEncoding 响应头。
2、优化 gzip 配置:除了基本的 gzip 配置外,还可以进一步优化以平衡性能和压缩率,使用gzip_proxied
控制在代理请求中是否启用 gzip:
“`nginx
gzip_proxied any;
“`
通过gzip_buffers
调整用于存储压缩数据的缓冲区:
“`nginx
gzip_buffers 16 8k;
“`
这意味着 Nginx 将为每个请求分配 16 个 8KB 的缓冲区来存储压缩数据。
配置连接复用与 keepalive
1、keepalive 连接:keepalive 连接允许客户端在同一个 TCP 连接上发送多个 HTTP 请求,减少了建立新连接的开销,提高了请求的响应速度,要在 Nginx 中启用 keepalive 连接,可以在nginx.conf
文件的 server 或 location 块中配置:
“`nginx
keepalive_timeout 65;
keepalive_requests 100;
“`
keepalive_timeout
设置了服务器在关闭 keepalive 连接前等待的时间(以秒为单位),keepalive_requests
限制了每个连接的最大请求数。
2、TCP Fast Open:TCP Fast Open 是一种网络协议优化技术,可以加快 TCP 连接的建立速度,在 Nginx 配置文件中,可以通过以下方式启用 TCP Fast Open:
“`nginx
tcp_fastopen on;
tcp_fastopen_connect_timeout 3s;
“`
tcp_fastopen on
启用了 TCP Fast Open,tcp_fastopen_connect_timeout
设置了连接超时时间。
系统层面优化
1、内核参数调整:调整内核参数可以提高网络栈的行为,增加系统文件描述符的限制、TCP连接队列的大小等,这些调整可以通过修改/etc/sysctl.conf
文件来实现。
“`bash
net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.ip_local_port_range="1024 65535"
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
“`
这些参数分别设置了监听套接字的未完成连接队列的最大长度、TCP连接建立时的SYN队列的最大长度、本地端口范围、回收TCP连接的时间以及控制TCP连接的TIME_WAIT状态。
2、文件描述符限制:增加系统允许的文件描述符数量,以便 Nginx 可以打开更多的连接,可以通过修改/etc/security/limits.conf
文件来增加 Nginx 用户(通常是 wwwdata 或 nginx)的 nofile 限制:
“`bash
nginx soft nofile 65535
nginx hard nofile 65535
“`
还需要修改/proc/sys/fs/filemax
文件来增加整个系统的最大文件描述符数:
“`bash
echo 65535 > /proc/sys/fs/filemax
“`
3、硬件和架构优化:使用固态硬盘(SSD)可以显著提高 I/O 性能,尤其是对于需要频繁读写文件的 Nginx 服务器,使用高带宽和低延迟的网络硬件(如万兆以太网)可以提高数据传输速度,如果服务器面临极高的负载,可以考虑使用硬件负载均衡器来分担 Nginx 的压力。
常见问题与解答
1、如何确定 Nginx worker 进程的最佳数量?
答:最佳 worker 进程的数量通常等于服务器的 CPU 核心数,这样可以最大化利用多核 CPU 的性能,如果您不确定服务器的 CPU 核心数,可以使用worker_processes auto;
让 Nginx 自动检测并设置合适的 worker 进程数量。
2、Nginx 如何处理大量并发连接?
答:Nginx 使用事件驱动架构来处理大量并发连接,它支持多种事件模型(如 select、poll、epoll、kqueue),epoll(适用于 Linux)是最常用的一种,通过合理设置worker_processes
和worker_connections
参数,可以调整 Nginx 同时处理的最大连接数,使用 keepalive 连接和开启 gzip 压缩也可以有效减少连接数和提高响应速度。
3、如何在 Nginx 中启用 gzip 压缩?
答:在 Nginx 配置文件中添加以下配置即可启用 gzip 压缩:
“`nginx
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1024;
gzip_comp_level 5;
gzip_vary on;
“`
这些配置分别启用了 gzip 压缩功能、指定了要压缩的 MIME 类型、设置了响应体的最小长度、设置了 gzip 的压缩级别以及使 Nginx 添加 Vary: AcceptEncoding 响应头。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1100280.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复