nginx性能优化有哪些方式?

0.运维干货分享

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,但在高并发场景下,仍然有很多优化手段可以进一步提升其性能。以下是 Nginx 性能优化的常见方式:

1. 优化 Worker 进程与连接数

Nginx 的并发处理能力主要依赖于 Worker 进程和每个 Worker 进程的连接数。

  • 调整 Worker 进程数量
    • Nginx 的 worker_processes 指令决定了使用多少个 Worker 进程。通常设置为与 CPU 核心数相同,以充分利用多核 CPU。
    • 配置示例:
nginx 复制代码
worker_processes auto;  # 自动根据 CPU 核心数设置
  • 增加 Worker 连接数
    • 使用 worker_connections 指令设置每个 Worker 进程可以处理的最大连接数。这个数值乘以 Worker 进程数决定了 Nginx 能处理的最大并发连接数。
    • 配置示例:
nginx 复制代码
events {
    worker_connections 1024;  # 每个 Worker 进程的最大连接数
}

2. 启用 Keep-Alive 连接

Keep-Alive 允许复用客户端与服务器之间的连接,减少频繁建立和关闭连接的开销。

  • 调整 Keep-Alive 设置
    • 配置 keepalive_timeout 来控制保持连接的时间,keepalive_requests 控制每个连接允许的请求数。
    • 配置示例:
nginx 复制代码
keepalive_timeout 65s;
keepalive_requests 1000;
  • 启用上游服务器的 Keep-Alive
    • 如果 Nginx 作为反向代理,也可以为后端上游服务器开启 Keep-Alive:
nginx 复制代码
upstream backend {
    server 192.168.0.1;
    keepalive 32;  # 设置与后端服务器的 Keep-Alive 连接池大小
}

3. 优化 Buffer 和缓存

Nginx 提供了多个缓冲区设置,合理配置这些缓冲区可以提高性能。

  • 调整缓冲区大小
    • 使用 client_body_buffer_size 和 client_header_buffer_size 来优化请求体和请求头的缓冲区大小:
nginx 复制代码
client_body_buffer_size 16k;
client_header_buffer_size 4k;
  • 启用缓存
    • 对静态资源或常见请求结果进行缓存,可以减少后端压力。配置 proxy_cache 或 fastcgi_cache 来启用缓存:
nginx 复制代码
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g;
location / {
    proxy_cache my_cache;
    proxy_pass http://backend;
}

4. Gzip 压缩

通过开启 Gzip 压缩,可以减少传输的数据量,提升页面加载速度。

  • 配置 Gzip 压缩
    • 启用 Gzip 并合理配置压缩级别和压缩的内容类型:
nginx 复制代码
gzip on;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

5. 调整超时设置

超时设置过长可能会导致资源占用增加,而设置过短可能会导致连接频繁断开。

  • 调整超时时间
    • 通过 client_body_timeout、client_header_timeout、keepalive_timeout、send_timeout 等指令设置合理的超时时间:
nginx 复制代码
client_body_timeout 12s;
client_header_timeout 12s;
keepalive_timeout 65s;
send_timeout 10s;

6. 减少日志记录

Nginx 记录大量访问日志和错误日志可能会带来磁盘 I/O 的瓶颈。在性能优化中,通常可以减少日志级别或禁用不必要的日志。

  • 降低日志级别
    • 对于高并发场景,可以将日志级别设置为较低级别(如 error):
nginx 复制代码
error_log /var/log/nginx/error.log crit;
access_log off;

7. 开启 HTTP/2 支持

HTTP/2 可以显著提升页面加载性能,尤其是在多资源加载的情况下。

  • 启用 HTTP/2
    • 在服务器配置中使用 http2 选项:
nginx 复制代码
server {
    listen 443 ssl http2;
    ...
}

8. 配置负载均衡与健康检查

在使用 Nginx 作为反向代理时,配置合理的负载均衡策略和健康检查可以提高整体服务的稳定性和响应速度。

  • 配置负载均衡策略
    • Nginx 支持多种负载均衡策略,如轮询(默认)、权重、最少连接等:
nginx 复制代码
upstream backend {
    least_conn;
    server 192.168.0.1 weight=3;
    server 192.168.0.2;
}
  • 启用健康检查
    • 使用第三方模块(如 ngx_http_healthcheck_module)或配置 max_fails 和 fail_timeout 进行健康检查:
nginx 复制代码
server 192.168.0.1 max_fails=3 fail_timeout=30s;

9. 合理配置文件描述符(FD)限制

Nginx 处理大量并发请求时,可能会受到文件描述符数量的限制。

  • 增加文件描述符限制
    • 在 Nginx 配置中设置更高的 worker_rlimit_nofile:
nginx 复制代码
worker_rlimit_nofile 65535;
  • 系统级别的优化
    • 确保系统级的文件描述符限制足够高,可以在 /etc/security/limits.conf 中配置:
plain 复制代码
* soft nofile 65535
* hard nofile 65535

10. 减少解析 DNS 的开销

Nginx 在处理请求时需要解析域名,频繁的 DNS 查询会增加延迟。可以使用 resolver 指令指定本地缓存的 DNS 服务器,并设置缓存 TTL。

  • 配置 DNS 缓存
nginx 复制代码
resolver 8.8.8.8 8.8.4.4 valid=300s;

11.总结

Nginx 性能优化涉及多个方面,包括进程和连接数配置、缓存机制、压缩、超时设置、日志优化、HTTP/2 支持、负载均衡等。通过合理配置这些选项,可以有效提升 Nginx 的性能,特别是在高并发场景下。每个优化点应根据具体的应用场景进行调整和测试,以达到最佳效果。

相关推荐
佩奇的技术笔记2 小时前
高性能Java并发编程:线程池与异步编程最佳实践
java·性能优化
Tee xm2 小时前
清晰易懂的 PHP 安装与配置教程
开发语言·php
.m3 小时前
Linux怎样源码安装Nginx
linux·运维·nginx
前端大卫7 小时前
【Chrome 官方示例】🔥手把手教你解锁 Performace 选项卡
前端·javascript·性能优化
xgxseven8 小时前
3.18练习
web安全·php
水滴石轩9 小时前
HarmonyOS TEXT 使用ResourceManager同步转换字符串的最佳实践
性能优化·架构
码云之上10 小时前
rollup进阶——为产物添加全局try-catch
性能优化·rollup.js·babel
Do10 小时前
性能优化之渲染层优化
javascript·面试·性能优化
优测云服务平台10 小时前
压测实战 | 微信小程序商城 “双 11” 的压测实践
测试工具·性能优化·小程序·压力测试
行思理11 小时前
php 高性能,高并发,有哪些框架,扩展,推荐一下,或者技术的实现有哪些
开发语言·php