Nginx 的性能优化

阅读时长 5 分钟读完

作为常用的 Web 服务器和反向代理服务器,Nginx (engine x) 可以极大地提升 Web 应用的性能。本文将重点介绍 Nginx 的性能优化策略,通过减少资源消耗、提高响应速度、增加并发量等方面的优化,为前端开发者提供指导和帮助。

前提知识

在介绍性能优化策略之前,需要了解一些相关的概念和基础知识。以下是相关解释:

  • Nginx 版本:本文以 Nginx 1.19.3 为例。
  • worker 进程:Nginx 主进程启动多个 worker 进程用于接收和处理请求。
  • keepalive 连接:指客户端与服务器端之间维持的一个持久化连接,能够实现多个请求共用同一个连接而无需每次建立新的连接。
  • 缓存:为了在频繁请求同一个资源时,提高响应速度,将该资源缓存在内存中,以便快速响应请求。

性能优化策略

1. 配置文件优化

优秀的配置文件能够在一定程度上影响 Nginx 的性能。以下是一些配置建议:

  • worker 进程数量:通常建议设置为 CPU 核心数的倍数。
  • worker 连接数限制:通过设置 worker_connections 的值来限制每个 worker 进程同时处理的连接数。建议根据服务器性能和连接性质进行调整,大约设置为 1024 - 2048。
  • 禁用不必要的模块:由于 Nginx 可以通过模块来扩展功能,但是每个模块也会带来一定的资源消耗,因此建议禁用不必要的模块,以减少资源消耗。
  • keepalive 连接:启用 keepalive 连接可以减少重复建立 TCP 连接的开销,提高响应速度。建议设置 keepalive_requests 和 keepalive_timeout 的值,以便更好地控制 keepalive 连接的数量和生命周期。

示例配置:

-- -------------------- ---- -------
---------------- -----
------ -
    ------------------ -----
-
---- -
    ------ -
        ------ ---
        ----------- ------------
        ------------------ ----
        ----------------- ----
        ---
    -
-
展开代码

2. 静态资源缓存

对于静态资源,可以通过缓存来减少对 backend 的请求,从而提高服务器性能和浏览器响应速度。Nginx 内置了一个 open_file_cache 和 proxy_cache 功能,可以帮助我们进行缓存管理。

示例配置:

-- -------------------- ---- -------
---------------- ---------------- ---------- ---------------------- -------------
------ -
    ------ ---
    ----------- ------------
    -------- ------- -
        ---------- --------------------
        ---------------- ---- ------
        ------------------ -------------
        ---------------------- ---
        -------------------- --
        ----------------- --- ----
    -
-
展开代码

上述代码中,proxy_cache_valid 表示将满足状态码为 200 的缓存数据有效期设置为 60 分钟。只有访问次数超过 3 次的资源才会被缓存,同时 Pragma 头信息将不会影响缓存。

3. Gzip 压缩

对于长宽比较大的静态资源,如图片和 CSS 文件等,可以通过 gzip 压缩减少传输网络带宽,提高响应速度。建议将 gzip 压缩与缓存同时使用,以减少服务器负载和网络带宽。

示例配置:

-- -------------------- ---- -------
---- -
    ---- ---
    --------------- -----
    ---------- ---------- -------- ---------------- ---------------------- ------------------------ -------- --------------- ------------------- ----------------
    ------ -
        ------ ---
        ----------- ------------
        -------- ------- -
            ---
            ----------- ---
        -
    -
-
展开代码

4. 负载均衡

负载均衡能够在多台服务器之间分配工作负载,为 Web 应用提供可靠的服务。Nginx 内置了负载均衡的功能,支持多种算法,包括 round-robin,ip_hash,least_conn 等。负载均衡也可以结合缓存和 keepalive 连接来提高性能。

示例配置:

-- -------------------- ---- -------
-------- ------- -
    ------ ---------------------
    ------ ---------------------
-
------ -
    ------ ---
    ----------- ------------
    -------- - -
        ---------- ---------------
    -
-
展开代码

上述代码中,两个后端服务器被定义在 upstream 中,Nginx 将请求均衡分配给这两个后端服务器,从而实现负载均衡。

总结

Nginx 的性能优化并不仅仅是上述几个策略,其他方面的优化,如网络、硬盘、CPU、内存等也需要针对实际情况进行综合考虑。本文仅为初步参考,希望能够为前端开发者提供帮助和指导。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64fb0282f6b2d6eab31bfc1b

纠错
反馈

纠错反馈