跳到主要内容

Nginx 配置优化

Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛用于负载均衡、缓存和静态资源服务。为了充分发挥 Nginx 的性能,合理的配置优化是必不可少的。本文将带你逐步了解如何优化 Nginx 配置,以提升服务器的性能和稳定性。

1. 理解 Nginx 配置结构

Nginx 的配置文件通常位于 /etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf。配置文件由多个块组成,主要包括:

  • 全局块:配置影响 Nginx 全局的指令。
  • events 块:配置影响 Nginx 服务器与客户端网络连接的指令。
  • http 块:配置 HTTP 服务器的指令。
  • server 块:配置虚拟主机的指令。
  • location 块:配置请求的路由和处理规则。

2. 优化 worker 进程

Nginx 使用多进程模型来处理请求。通过优化 worker 进程的数量和连接数,可以显著提升性能。

2.1 设置 worker 进程数量

默认情况下,Nginx 会根据 CPU 核心数自动设置 worker 进程数量。你可以通过以下配置手动设置:

nginx
worker_processes auto;
提示

auto 会根据 CPU 核心数自动调整 worker 进程数量。你也可以设置为具体的数字,例如 worker_processes 4;

2.2 设置每个 worker 进程的最大连接数

每个 worker 进程可以处理的最大连接数由 worker_connections 指令控制:

nginx
events {
worker_connections 1024;
}
警告

worker_connections 的值不能超过系统的最大文件描述符限制。你可以通过 ulimit -n 查看当前限制。

3. 启用 Gzip 压缩

Gzip 压缩可以显著减少传输的数据量,从而加快页面加载速度。你可以通过以下配置启用 Gzip 压缩:

nginx
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6;
gzip_min_length 1000;
gzip_proxied any;
}
备注

gzip_comp_level 控制压缩级别,范围是 1 到 9,级别越高压缩率越高,但 CPU 消耗也越大。

4. 配置缓存

缓存可以显著减少后端服务器的负载,并加快响应速度。Nginx 提供了多种缓存机制,包括代理缓存和静态资源缓存。

4.1 配置代理缓存

代理缓存可以缓存后端服务器的响应:

nginx
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

server {
location / {
proxy_cache my_cache;
proxy_pass http://backend;
}
}
}
提示

proxy_cache_path 指定缓存路径和大小,keys_zone 定义缓存区域名称和大小。

4.2 配置静态资源缓存

静态资源缓存可以减少对磁盘的 I/O 操作:

nginx
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
备注

expires 指令设置资源的过期时间,add_header 添加缓存控制头。

5. 限制请求速率

为了防止恶意请求或流量过大导致服务器崩溃,可以通过限制请求速率来保护服务器:

nginx
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
location / {
limit_req zone=one burst=5;
}
}
}
注意

rate=1r/s 表示每秒允许 1 个请求,burst=5 表示允许突发 5 个请求。

6. 实际案例

假设你有一个高流量的网站,用户主要访问静态资源(如图片、CSS、JS 文件)。你可以通过以下配置优化 Nginx:

nginx
worker_processes auto;
events {
worker_connections 1024;
}

http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6;
gzip_min_length 1000;
gzip_proxied any;

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

server {
location / {
proxy_cache my_cache;
proxy_pass http://backend;
}

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}
}

7. 总结

通过优化 Nginx 配置,你可以显著提升服务器的性能和稳定性。本文介绍了如何优化 worker 进程、启用 Gzip 压缩、配置缓存以及限制请求速率。希望这些技巧能帮助你更好地管理 Nginx 服务器。

8. 附加资源

9. 练习

  1. 在你的 Nginx 服务器上启用 Gzip 压缩,并测试页面加载速度的变化。
  2. 配置一个代理缓存,观察缓存命中率的变化。
  3. 尝试限制某个 API 端点的请求速率,防止恶意请求。

通过实践这些优化技巧,你将更深入地理解 Nginx 的工作原理,并能够根据实际需求进行配置优化。