Nginx 包管理安装与配置优化指南(YUM / APT)
本文档提供在 CentOS/RHEL(YUM/DNF) 和 Ubuntu/Debian(APT) 系统中,通过官方包管理器快速安装、配置并优化 Nginx 的完整流程。适用于生产环境快速部署与性能调优。
1. 概述
使用 yum 或 apt 安装 Nginx 具有以下优势:
- 自动解决依赖
- 集成 systemd 服务管理
- 支持 logrotate 日志轮转
- 安全更新便捷(通过系统包管理器)
⚠️ 注意:默认安装的 Nginx 版本可能较旧。建议启用 Nginx 官方仓库 获取最新稳定版。
2. YUM 安装(CentOS / RHEL / Rocky Linux)
2.1 添加 Nginx 官方仓库
# 创建 repo 文件
sudo tee /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
✅ 推荐使用
stable(稳定版)。如需最新特性,可启用mainline:sudo yum-config-manager --enable nginx-mainline
2.2 安装 Nginx
sudo yum update -y
sudo yum install -y nginx
2.3 启动并设置开机自启
sudo systemctl enable nginx
sudo systemctl start nginx
3. APT 安装(Ubuntu / Debian)
3.1 添加 Nginx 官方 GPG 密钥与仓库
# 安装必要工具
sudo apt update
sudo apt install -y curl gnupg2 ca-certificates
# 添加 GPG 密钥
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg
# 添加官方仓库(Ubuntu 22.04 示例)
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
# Debian 用户替换为:
# echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
# https://nginx.org/packages/debian `lsb_release -cs` nginx" \
# | sudo tee /etc/apt/sources.list.d/nginx.list
3.2 安装 Nginx
sudo apt update
sudo apt install -y nginx
3.3 启动服务
sudo systemctl enable nginx
sudo systemctl start nginx
4. 基础目录结构说明
| 路径 | 说明 |
|---|---|
/etc/nginx/ |
主配置目录 |
/etc/nginx/nginx.conf |
全局主配置文件 |
/etc/nginx/conf.d/ |
子配置目录(.conf 文件自动加载) |
/etc/nginx/sites-available/ |
(Debian 系)站点配置模板 |
/etc/nginx/sites-enabled/ |
(Debian 系)启用的站点(软链接) |
/var/log/nginx/ |
访问日志与错误日志 |
/usr/share/nginx/html/ |
默认 Web 根目录 |
/var/cache/nginx/ |
缓存目录(proxy_cache, fastcgi_cache) |
💡 CentOS 默认使用
conf.d/*.conf;Ubuntu 默认使用sites-enabled/。
5. 核心配置优化
编辑 /etc/nginx/nginx.conf:
user nginx;
worker_processes auto; # 自动匹配 CPU 核心数
worker_rlimit_nofile 65535; # 提高 FD 限制
events {
use epoll; # Linux 高性能事件模型
worker_connections 10240; # 单 worker 最大连接数
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 1000;
# Gzip 压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
# 安全头
server_tokens off;
# 包含子配置
include /etc/nginx/conf.d/*.conf;
}
6. 性能调优建议
6.1 系统级调优(/etc/sysctl.conf)
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
fs.file-max = 2097152
应用:
sudo sysctl -p
6.2 文件描述符限制(/etc/systemd/system/nginx.service.d/override.conf)
sudo mkdir -p /etc/systemd/system/nginx.service.d
sudo tee /etc/systemd/system/nginx.service.d/override.conf << EOF
[Service]
LimitNOFILE=65536
EOF
sudo systemctl daemon-reload
sudo systemctl restart nginx
7. 安全加固
7.1 隐藏版本号
已在 nginx.conf 中设置 server_tokens off;
7.2 限制请求方法
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE)$) {
return 405;
}
7.3 防止信息泄露
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
7.4 启用 ModSecurity(可选)
可通过 libmodsecurity3 + ngx_modsecurity 集成 WAF(需额外编译或使用第三方包)。
8. 日志与监控
8.1 自定义日志格式(nginx.conf)
log_format main_ext '$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" '
'uht="$upstream_header_time" urt="$upstream_response_time"';
access_log /var/log/nginx/access.log main_ext buffer=16k flush=5s;
error_log /var/log/nginx/error.log warn;
8.2 启用状态页(用于监控)
server {
listen 127.0.0.1:8080;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
访问:curl http://127.0.0.1:8080/nginx_status
8.3 集成 Prometheus(可选)
使用 nginx-prometheus-exporter 抓取指标。
9. 常见问题排查
| 问题 | 命令/检查点 |
|---|---|
| 启动失败 | sudo nginx -t(检查语法)、journalctl -u nginx |
| 502 Bad Gateway | 检查后端服务是否运行、proxy_pass 地址是否正确 |
| 端口冲突 | sudo ss -tulnp | grep :80 |
| 权限拒绝 | 检查 /var/log/nginx/ 和网站目录权限(属主应为 nginx 或 www-data) |
| 配置未生效 | 确认是否 reload:sudo systemctl reload nginx |