简介
本教程将教你如何优化 Nginx,使其能够高效地处理高流量网站。 Nginx 是一个强大且高性能的 Web 服务器,以其高效处理大量并发连接的能力而闻名,这使得它成为高流量网站的流行选择。 正确优化 Nginx 可以显著提高服务器的性能,减少加载时间,并确保你的网站能够处理大量的请求而不会崩溃。
本教程将手把手地指导你完成优化 Nginx 以应对高流量的步骤,重点关注配置调整、缓存、连接处理和安全增强。
准备工作
服务器准备
必要前提:
- 一个充满求知欲的大脑。
- 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。
我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。
注册链接: https://rainyun.ivwv.site
创建雨云服务器
以下步骤仅供参考,请根据实际需求选择配置。
- 点击 云产品 → 云服务器 → 立即购买。
- 选择距离你较近的区域,以保证低延迟。
- 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
- 最后按照提示进行购买。
- 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
- 我们使用
PowerShell
进行SSH
远程连接到服务器,Win+R
打开运行窗口,输入powershell
后点击确定。
- 输入
ssh root@你的服务器IP
例如ssh root@154.9.227.239
回车后,首次需要输入yes
,再次回车后即可登录服务器。
- 到此为止,我们的云服务器就远程连接上了。
安装和配置步骤
第一步:更新 Nginx 到最新版本
保持 Nginx 更新可以确保你拥有最新的性能改进、功能和安全补丁。
更新 Nginx 的命令:
bash
# For Ubuntu/Debian
sudo apt update
sudo apt install nginx
# For RHEL/AlmaLinux/Rocky Linux
sudo dnf update
sudo dnf install nginx
第二步:调整工作进程和连接数
Nginx 使用工作进程来处理传入的连接。优化这些设置对于处理高流量至关重要。
编辑 Nginx 配置文件:
bash
sudo nano /etc/nginx/nginx.conf
调整工作进程和工作连接数:
worker_processes auto;
worker_connections 1024;
worker_processes auto;
: 这个设置会自动将工作进程的数量设置为与可用的 CPU 核心数匹配,从而优化服务器的性能。worker_connections 1024;
: 指定每个工作进程可以同时处理的最大连接数。这个值可以根据服务器的性能和流量进行增加。
启用多线程(可选):
events {
worker_connections 1024;
multi_accept on;
}
multi_accept on;
: 这个设置允许一个工作进程一次接受多个新连接,从而在高峰流量期间提高性能。
第三步:启用 Gzip 压缩
Gzip 压缩可以减少传输数据的大小,从而缩短加载时间并减少带宽使用。
在 Nginx 配置中启用 Gzip:
bash
sudo nano /etc/nginx/nginx.conf
在 http
块下添加或修改以下行:
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 256;
gzip_comp_level 5;
}
gzip on;
: 启用 Gzip 压缩。gzip_types
: 指定要压缩的 MIME 类型。gzip_min_length 256;
: 仅压缩大于 256 字节的响应。gzip_comp_level 5;
: 设置压缩级别(1-9);更高的级别提供更好的压缩,但会使用更多的 CPU。
第四步:配置静态内容缓存
缓存静态内容(如图像、CSS 和 JavaScript)可以减少服务器负载并加快响应速度。
将以下行添加到 server
块中:
location ~* \\.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
expires 30d;
: 将浏览器缓存过期时间设置为 30 天。add_header Cache-Control "public, no-transform";
: 添加缓存控制头。
第五步:优化缓冲区和超时
优化缓冲区和超时可以帮助 Nginx 更有效地处理更多连接,而不会使内存过载。
编辑主要的 Nginx 配置文件:
bash
sudo nano /etc/nginx/nginx.conf
在 http
块下添加以下设置:
http {
client_body_buffer_size 16k;
client_max_body_size 8m;
client_header_buffer_size 1k;
large_client_header_buffers 4 16k;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
}
client_body_buffer_size 16k;
: 设置客户端请求的缓冲区大小。client_max_body_size 8m;
: 限制客户端请求的最大大小。sendfile on;
: 启用零拷贝文件传输,从而减少 CPU 负载。tcp_nopush on;
和tcp_nodelay on;
: 优化 TCP 连接处理以获得更好的性能。keepalive_timeout 65;
: 设置保持活动超时时间,允许连接保持打开 65 秒。
第六步:实现负载均衡
Nginx 可以将传入的流量分配到多个服务器上,从而提高性能和冗余。
在 Nginx 中配置负载均衡:
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
upstream backend { ... }
: 定义一个包含多个服务器的后端组。weight=3;
: 以指定的权重分配流量,将三倍的流量发送到第一个服务器。
第七步:启用连接缓存和调优
Nginx 连接缓存和调优可以显著提高它处理多个连接的方式。
在 nginx.conf
的 http
块下添加以下指令:
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_cache_valid 200 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_pass http://backend;
}
}
}
proxy_cache_path
: 定义缓存代理响应的路径。proxy_cache_use_stale
: 如果后端服务器不可用,则使用过时的缓存响应。
第八步:配置安全设置
保护你的 Nginx 服务器还可以防止 DDoS 攻击并提高性能。
限制请求大小和速率限制:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=5;
}
}
}
limit_req_zone
: 定义用于速率限制的共享内存区域。rate=10r/s
: 将请求限制为每秒 10 个请求。
第九步:测试并重启 Nginx
在进行更改后,测试你的 Nginx 配置是否有错误并重启服务器。
测试 Nginx 配置:
bash
sudo nginx -t
重启 Nginx:
bash
sudo systemctl restart nginx
结尾
优化 Nginx 以应对高流量网站涉及到调整各种设置,以提高性能、减少延迟和保护服务器。 通过遵循这些步骤,你可以确保你的 Nginx 服务器能够有效地处理大量流量。 定期监控服务器的性能,并根据需要调整设置,以保持其最佳运行状态。
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site