Nginx 包管理安装与配置优化指南(YUM / APT)

本文档提供在 CentOS/RHEL(YUM/DNF)Ubuntu/Debian(APT) 系统中,通过官方包管理器快速安装、配置并优化 Nginx 的完整流程。适用于生产环境快速部署与性能调优。


1. 概述

使用 yumapt 安装 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/ 和网站目录权限(属主应为 nginxwww-data
配置未生效 确认是否 reload:sudo systemctl reload nginx

results matching ""

    No results matching ""