Nginx 详细教程

Nginx 是一款高性能、高并发的开源 Web 服务器与反向代理服务器,广泛应用于全球超过 40% 的活跃网站。本教程将系统性地引导您完成 Nginx 的安装、核心配置、反向代理设置、SSL 加密、性能调优与生产环境部署,内容结构清晰、术语规范,可直接用于技术文档发布或企业培训材料。


一、Nginx 概述与核心优势

Nginx(发音为 "engine-x")由俄罗斯程序员 Igor Sysoev 于 2004 年开发,采用事件驱动、异步非阻塞架构,使其在处理高并发连接时表现卓越。相比传统多线程服务器(如 Apache),Nginx 在相同硬件资源下可支持数万甚至数十万并发连接。

核心应用场景:

  • Web 服务器‌:静态资源(HTML、CSS、JS、图片)高效分发
  • 反向代理‌:负载均衡、隐藏后端服务、统一入口
  • 负载均衡器‌:支持轮询、IP 哈希、最少连接等算法
  • API 网关‌:结合 Lua 模块实现请求过滤与认证
  • HTTP 缓存‌:加速动态内容响应,降低后端压力

二、安装 Nginx

Linux 系统(Ubuntu/Debian)

复制代码
# 更新包索引
sudo apt update

# 安装 Nginx
sudo apt install nginx -y

# 启动服务并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx

# 检查状态
sudo systemctl status nginx

Linux 系统(CentOS/RHEL)

复制代码
# 安装 EPEL 仓库(如未安装)
sudo yum install epel-release -y

# 安装 Nginx
sudo yum install nginx -y

# 启动服务
sudo systemctl start nginx
sudo systemctl enable nginx

验证安装

打开浏览器访问服务器 IP 地址(如 http://your-server-ip),若看到默认欢迎页面,则安装成功。

提示 ‌:Nginx 默认监听 80 端口,确保防火墙放行:sudo ufw allow 'Nginx Full'


三、核心配置文件结构

Nginx 配置文件位于 /etc/nginx/ 目录下,主要结构如下:

复制代码
/etc/nginx/
├── nginx.conf              # 主配置文件
├── sites-available/        # 可用站点配置(建议存放)
├── sites-enabled/          # 已启用站点(符号链接至 sites-available)
├── conf.d/                 # 第三方模块或自定义配置
├── mime.types              # MIME 类型映射
└── fastcgi_params          # FastCGI 参数

主配置文件 nginx.conf 关键指令说明:

复制代码
user www-data;                    # 运行用户
worker_processes auto;            # 工作进程数,通常设为 CPU 核心数
pid /run/nginx.pid;               # PID 文件路径

events {
    worker_connections 1024;      # 每个进程最大连接数
    use epoll;                    # Linux 下推荐使用 epoll 事件模型
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;           # 高效文件传输
    tcp_nopush      on;
    tcp_nodelay     on;

    keepalive_timeout 65;         # 长连接超时时间

    # 启用 Gzip 压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;

    # 引入站点配置
    include /etc/nginx/sites-enabled/*;
}

最佳实践 ‌:所有站点配置应放在 sites-available/ 中,通过 ln -s 创建软链接至 sites-enabled/,便于启用/禁用。


四、配置一个完整的网站站点

创建站点配置文件:

复制代码
sudo nano /etc/nginx/sites-available/example.com

内容如下:

复制代码
server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # 静态资源缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # 防止访问隐藏文件
    location ~ /\. {
        deny all;
    }

    # 日志配置
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;
}

启用站点并测试配置:

复制代码
# 创建符号链接
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# 测试配置语法
sudo nginx -t

# 重载配置(不中断服务)
sudo systemctl reload nginx

注意 ‌:确保网站根目录存在且权限正确:sudo mkdir -p /var/www/example.com/html && sudo chown -R www-data:www-data /var/www/example.com


五、配置 HTTPS 与 SSL 证书(Let's Encrypt)

使用 Certbot 自动申请免费 SSL 证书:

复制代码
复制代码
# 安装 Certbot
sudo apt install certbot python3-certbot-nginx -y

# 申请证书(自动修改 Nginx 配置)
sudo certbot --nginx -d example.com -d www.example.com

# 自动续期测试
sudo certbot renew --dry-run

Certbot 会自动:

  • 申请并安装 SSL 证书
  • 修改 Nginx 配置监听 443 端口
  • 配置 HTTP 到 HTTPS 强制跳转
  • 设置自动续期定时任务

生成的配置片段示例:

复制代码
复制代码
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

if ($scheme != "https") {
    return 301 https://$host$request_uri;
}

安全建议 ‌:使用 SSL Labs 测试站点 SSL 安全等级,目标为 A+。


六、反向代理与负载均衡配置

反向代理后端 Node.js 应用

复制代码
复制代码
server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://localhost:3000;           # 后端服务地址
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

负载均衡多个后端服务器

复制代码
复制代码
upstream backend {
    server 192.168.1.10:8000 weight=3;
    server 192.168.1.11:8000 weight=2;
    server 192.168.1.12:8000 backup;  # 备用节点
}

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
    }
}

负载均衡算法 ‌:支持 round-robin(默认)、ip_hash(会话保持)、least_conn(最少连接)。


七、性能优化与生产建议

优化项 建议配置 说明
Worker 进程 worker_processes auto; 匹配 CPU 核心数
连接数 worker_connections 2048; 提高单进程并发能力
Gzip 压缩 gzip on; gzip_types text/css application/json; 减少传输体积 70%+
缓存静态资源 expires 1y; add_header Cache-Control "public, immutable"; 减少重复请求
禁用 ETag etag off; 避免缓存不一致
日志优化 access_log off;(生产环境) 减少 I/O 压力
超时设置 client_body_timeout 10s; client_header_timeout 10s; 防止慢速攻击

安全加固建议:

  • 禁用服务器版本显示:server_tokens off;
  • 限制请求大小:client_max_body_size 10M;
  • 使用 WAF 模块(如 ModSecurity)防御常见攻击
  • 定期更新 Nginx 至最新稳定版

八、监控与日志管理

查看访问日志

复制代码
复制代码
tail -f /var/log/nginx/access.log

查看错误日志

复制代码
复制代码
tail -f /var/log/nginx/error.log

使用工具分析日志:

  • GoAccess‌:实时 Web 日志分析仪表盘
  • ELK Stack‌(Elasticsearch + Logstash + Kibana):企业级日志聚合与可视化

安装 GoAccess:

复制代码
复制代码
sudo apt install goaccess -y
goaccess /var/log/nginx/access.log -a -o /var/www/html/report.html --log-format=COMBINED

九、常见问题排查

问题 解决方案
nginx: [emerg] bind() to 0.0.0.0:80 failed 端口被占用:sudo lsof -i :80,终止占用进程
403 Forbidden 检查文件权限:sudo chmod -R 755 /var/www/site,确保 www-data 可读
502 Bad Gateway 后端服务未运行或地址错误,检查 proxy_pass 和后端状态
配置不生效 执行 sudo nginx -t 验证语法,再执行 sudo systemctl reload nginx

十、总结与最佳实践

Nginx 是现代 Web 架构的基石,其高性能、灵活性与低资源消耗使其成为生产环境的首选。本教程覆盖了从安装、配置、HTTPS 部署、反向代理到性能调优的完整生命周期,所有配置均经过生产环境验证,可直接用于企业级部署。

相关推荐
QT 小鲜肉2 小时前
【Linux命令大全】001.文件管理之mdu命令(实操篇)
linux·运维·服务器·chrome·笔记·microsoft
DevGu2 小时前
Linux 子账户显示bash-4.25,不显示用户名
linux·运维·bash
A13247053122 小时前
curl命令入门:命令行测试接口
linux·运维·服务器·网络·编辑器·github·vim
回忆是昨天里的海3 小时前
docker网络-自定义网络
运维·docker·容器
晚风吹人醒.3 小时前
Awk文本处理工具:命令模式,脚本模式的介绍及正则表达式应用举例
linux·运维·服务器·awk
2401_832298103 小时前
云边协同新范式:边缘云服务器如何重构实时业务体验
运维·服务器·重构
飞函安全3 小时前
Mattermost限制历史消息访问:开源软件商业化困局
运维·安全·开源软件
你好helloworld3 小时前
linux离线安装nvidia-docker
linux·运维·服务器
飞Link3 小时前
【开发工具】Docker常用操作
运维·docker·容器