您好,登录后才能下订单哦!
# Nginx服务器怎么优化
## 前言
Nginx作为高性能的Web服务器和反向代理服务器,在现代互联网架构中扮演着重要角色。随着业务量的增长,合理的优化配置可以显著提升服务器性能、降低资源消耗并增强安全性。本文将系统性地介绍Nginx服务器的优化策略,涵盖配置调优、性能优化、安全加固等方面。
---
## 一、基础配置优化
### 1. 调整工作进程和工作连接
```nginx
worker_processes auto; # 自动匹配CPU核心数
worker_rlimit_nofile 100000; # 每个worker能打开的文件描述符上限
events {
worker_connections 4096; # 每个worker的最大连接数
use epoll; # Linux系统推荐使用epoll模型
multi_accept on; # 一次性接受所有新连接
}
优化说明:
- worker_processes
建议设为CPU核心数(可通过nproc
查询)
- 文件描述符限制需大于worker_connections × worker_processes
http {
sendfile on; # 启用零拷贝传输
tcp_nopush on; # 仅在sendfile开启时有效,优化数据包发送
tcp_nodelay on; # 禁用Nagle算法,提升实时性
}
keepalive_timeout 65; # 长连接保持时间
keepalive_requests 1000; # 单个长连接最大请求数
client_header_timeout 15s; # 请求头读取超时
client_body_timeout 15s; # 请求体读取超时
send_timeout 10s; # 响应发送超时
server {
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d; # 缓存有效期
access_log off; # 关闭日志记录
add_header Cache-Control "public";
}
}
gzip on;
gzip_min_length 1k; # 最小压缩文件大小
gzip_comp_level 6; # 压缩级别(1-9)
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_vary on; # 根据Accept-Encoding头返回不同内容
upstream backend {
least_conn; # 最少连接算法
server 192.168.1.1:8080 weight=5;
server 192.168.1.2:8080;
keepalive 32; # 保持的长连接数
}
server {
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
aio threads; # 异步文件IO
directio 4m; # 大于4M的文件使用直接IO
open_file_cache max=10000 inactive=30s; # 文件描述符缓存
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
server_tokens off; # 响应头中隐藏版本号
limit_except GET POST PUT DELETE {
deny all;
}
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=20 nodelay;
}
}
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'rt=$request_time uct="$upstream_connect_time"';
access_log /var/log/nginx/access.log main buffer=32k flush=1m;
建议: - 生产环境建议日志轮转(使用logrotate) - 高并发场景可考虑关闭access_log
load_module modules/ngx_http_brotli_filter_module.so; # 示例:Brotli压缩模块
# 添加到/etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65536
net.ipv4.tcp_tw_reuse = 1
server {
request_pool_size 4k; # 每个请求内存池大小
output_buffers 4 32k; # 输出缓冲区配置
}
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.1.0/24;
deny all;
}
输出示例:
Active connections: 3
server accepts handled requests
100 100 200
Reading: 0 Writing: 1 Waiting: 2
perf record -p <nginx_worker_pid>
nginx -t
tail -f /var/log/nginx/error.log
可能原因: 后端服务超时
解决方案:
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
解决方案:
server {
listen 80 reuseport; # Linux 3.9+支持
}
优化方向:
- 检查worker_connections
是否足够
- 增加worker_processes
- 考虑启用zone
共享内存
通过本文介绍的优化措施,您可以使Nginx服务器达到最佳性能状态。实际优化时需要根据具体业务场景进行测试和调整,建议每次只修改一个参数并通过压测工具(如wrk、ab)验证效果。持续的监控和适时的调整是保持服务器高性能的关键。
推荐进一步优化工具: - JMeter:全面性能测试 - WebPageTest:前端性能分析 - Varnish:专业级缓存加速
注:所有配置修改后需执行
nginx -s reload
生效 “`
该文章共计约4150字,完整覆盖了Nginx优化的核心要点。实际部署时建议根据服务器硬件配置和业务特点进行针对性调整。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。