跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Nginx 核心配置与实战指南

Nginx 高性能 Web 服务器配置实战。涵盖源码编译安装、平滑升级回滚、systemd 服务管理、核心参数详解(events/http/location)、动静分离、反向代理(四层/七层)、HTTPS 加密、Rewrite 规则及 IO 模型原理。通过实际案例演示 PHP 集成、缓存加速及防盗链配置,适合运维人员深入理解 Nginx 底层机制与生产环境调优。

信号故障发布于 2026/4/5更新于 2026/9/557 浏览

Nginx 概述

Nginx 是一款由俄罗斯程序员 Igor Sysoev 开发的轻量级、高性能 HTTP 和反向代理服务器,同时也支持 IMAP/POP3/SMTP 代理。自 2004 年发布以来,凭借其高并发处理能力、低内存消耗和稳定性,成为全球最受欢迎的 Web 服务器之一,广泛应用于静态资源服务、反向代理、负载均衡及 API 网关等场景。

一、安装与编译

源码编译安装

推荐使用源码编译以获取最佳性能并定制模块。解压压缩包后进入目录:

tar zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0

执行 configure 脚本时,建议指定用户组、SSL 支持及常用模块:

./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_ssl_module --with-http_v2_module \
--with-http_realip_module --with-http_stub_status_module \
--with-pcre --with-stream --with-stream_ssl_module \
--with-stream_realip_module
make && make install

验证版本及编译参数:

/usr/local/nginx/sbin/nginx -V

自定义版本号

若需修改显示的版本号,可在编译前编辑 src/core/nginx.h:

#define NGINX_VERSION ""
#define NGINX_VER "CustomVersion/" NGINX_VERSION

重新编译后,nginx -v 将显示自定义信息。

二、平滑升级与回滚

升级流程

  1. 编译新版本:解压新包,运行 configure(无需 make install),仅执行 make。
  2. 备份旧二进制:保留当前运行的 /usr/local/nginx/sbin/nginx。
  3. 替换新二进制:将新编译的 objs/nginx 覆盖旧文件。
  4. 重载配置:发送信号让主进程加载新代码,Worker 进程会优雅重启。
kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid)

若发现问题,可通过 kill 旧进程或恢复备份快速回滚。

回滚操作

如果新版本存在严重问题,可重新拉起旧版本 Worker 进程。建议先备份新版文件:

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.new
# 恢复旧版
mv /usr/local/nginx/sbin/nginx.old /usr/local/nginx/sbin/nginx
systemctl reload nginx

三、Systemd 服务管理

编写 systemd 配置文件便于统一管理:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

生效配置并启动:

systemctl daemon-reload
systemctl enable --now nginx

四、核心配置详解

1. 配置文件结构

主配置文件分为四个逻辑块:

  • main block: 全局配置段。
  • event: 事件驱动相关配置。
  • http: Web 服务器相关配置(包含多个 server)。
  • mail/stream: 邮件或 TCP 代理配置。

2. 全局配置块

user nginx nginx;
worker_processes auto; # 自动匹配 CPU 核心数
worker_cpu_affinity 00000001 00000010; # 绑定 CPU 核,减少上下文切换
worker_rlimit_nofile 100000; # 限制打开文件数
error_log logs/error.log warn; # 错误日志级别
pid logs/nginx.pid; # PID 文件路径

CPU 绑定示例:

worker_processes auto;
worker_cpu_affinity 000001 000010 000100 001000 010000 100000;

3. events 块配置

控制连接处理机制,高并发场景下至关重要:

events {
    worker_connections 10000; # 单进程最大并发数
    use epoll;                # Linux 下推荐 epoll
    accept_mutex on;          # 避免惊群效应
    multi_accept on;          # 批量接受连接
}

调优提示:若遇到 Too many open files 错误,需调整系统限制:

ulimit -n 100000
vim /etc/security/limits.conf
* - nofile 100000

4. http 块配置

这是功能最丰富的部分,涵盖缓存、代理、日志等:

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

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer"';

    access_log logs/access.log main;

    sendfile on;              # 零拷贝优化
    keepalive_timeout 65;     # 长连接超时
    gzip on;                  # 开启压缩

    include "/usr/local/nginx/conf.d/*.conf";
}

MIME 类型处理:

若 PHP 文件默认被识别为 application/octet-stream,可调整 default_type:

default_type text/html;

五、站点发布与 Location 匹配

基于域名的虚拟主机

创建子配置文件并引入主配置:

server {
    listen 80;
    server_name www.czg.org;
    root /webdata/nginx/czg.org/czg/html;
}

Root 与 Alias 的区别

  • root: 拼接 URI 到根目录,适合标准映射。
  • alias: 替换 URI 路径,常用于重定向特定目录。

Location 优先级

匹配顺序通常为:=, ^~, ~, ~*, 无符号。精确匹配优先级最高。

location = /test { return 200 "exact match"; }
location ^~ /static { return 200 "prefix match"; }

六、高级功能实战

1. 账户认证

使用 htpasswd 生成加密密码:

htpasswd -cmb /usr/local/nginx/.htpasswd user password

在 location 中启用认证:

location /admin {
    auth_basic "login passwd";
    auth_basic_user_file "/usr/local/nginx/.htpasswd";
}

2. 自定义错误页

error_page 404 502 /error;
location /error {
    alias /usr/local/nginx/errorpage/errormessage;
}

3. 文件检测 (try_files)

用于 SPA 路由或默认页面回退:

try_files $uri $uri.html $uri/index.html /errorpage/default.html;

4. HTTPS 全站加密

生成证书并配置 SSL:

openssl req -newkey rsa:2048 -nodes -sha256 \
-keyout certs/czg.org.key -x509 -days 365 \
-out certs/czg.org.crt
server {
    listen 443 ssl;
    ssl_certificate /usr/local/nginx/certs/czg.org.crt;
    ssl_certificate_key /usr/local/nginx/certs/czg.org.key;
    ssl_session_cache shared:sslcache:20m;
    
    if ($scheme = http) {
        rewrite ^/(.*) https://$host/$1 permanent;
    }
}

5. 防盗链

基于 Referer 头限制访问:

location ~* \.(jpg|png)$ {
    valid_referers none blocked server_names *.czg.org;
    if ($invalid_referer) {
        return 403;
    }
}

6. 反向代理

七层代理 (HTTP)
location / {
    proxy_pass http://backend_server:80;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}
四层代理 (TCP)

需在 stream 块中配置:

stream {
    server {
        listen 3306;
        proxy_pass 172.25.254.50:3306;
    }
}

7. FastCGI 集成 PHP

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi.conf;
}

8. 缓存加速

结合 Memcached 实现动态内容缓存:

location ~ \.php$ {
    set $key $uri$args;
    srcache_fetch GET /memc $key;
    srcache_store PUT /memc $key;
    fastcgi_pass 127.0.0.1:9000;
}

七、IO 模型原理

理解 IO 模型有助于深入掌握 Nginx 的高性能机制。

  • 阻塞 IO: 等待数据就绪,简单但效率低。
  • 非阻塞 IO: 立即返回状态,需轮询,消耗 CPU。
  • 多路复用 (Select/Poll/Epoll): 一个线程监控多个描述符,Nginx 默认使用 Epoll。
  • 异步 IO: 内核完成读写后通知应用,Linux 下支持尚不完善。

Nginx 采用 Epoll + 事件驱动模型,实现了高并发下的低资源占用。

八、OpenResty 扩展

OpenResty 是基于 Nginx 与 Lua 的高性能平台,适合需要复杂逻辑处理的场景。编译时需卸载原生 Nginx,并添加 Lua 模块支持。

目录

  1. Nginx 概述
  2. 一、安装与编译
  3. 源码编译安装
  4. 自定义版本号
  5. 二、平滑升级与回滚
  6. 升级流程
  7. 回滚操作
  8. 恢复旧版
  9. 三、Systemd 服务管理
  10. 四、核心配置详解
  11. 1. 配置文件结构
  12. 2. 全局配置块
  13. 3. events 块配置
  14. 4. http 块配置
  15. 五、站点发布与 Location 匹配
  16. 基于域名的虚拟主机
  17. Root 与 Alias 的区别
  18. Location 优先级
  19. 六、高级功能实战
  20. 1. 账户认证
  21. 2. 自定义错误页
  22. 3. 文件检测 (try_files)
  23. 4. HTTPS 全站加密
  24. 5. 防盗链
  25. 6. 反向代理
  26. 七层代理 (HTTP)
  27. 四层代理 (TCP)
  28. 7. FastCGI 集成 PHP
  29. 8. 缓存加速
  30. 七、IO 模型原理
  31. 八、OpenResty 扩展

更多推荐文章

查看全部
  • 循环神经网络(RNN)与序列数据处理实战
  • Quartus 18.0 安装及 ModelSim 环境配置
  • OpenClaw 配置指南:定制 AI 助手个性
  • OpenClaw 系列 AI Agent 工具选型指南
  • STM32 调试 Internal command error 错误修复方案
  • 基于开源模型的成人内容过滤合规解决方案
  • 基于 MCP 协议辅助 JS 逆向分析与调试
  • 协作机器人拖动示教控制原理与实现
  • Everything Claude Code:Claude Code 配置集合与 AI 开发工作流
  • 本地大模型部署:从入门到弃坑的现实复盘
  • whisper-large-v3-turbo 高效部署与性能解析
  • 低代码AI架构:简化灵活智能架构落地
  • Android 使用 ZXing 库实现二维码扫描与生成
  • 前端拖拽交互实现:原生 API 与第三方库对比
  • Win10 彻底关闭 Microsoft 365 Copilot 弹窗的 6 种方法
  • GitHub 学生认证及 VS Code 中配置 Copilot 实战指南
  • 2025 年 12 月 GESP C++ 四级真题解析
  • Vue 组件根元素样式失效原因及解决方案
  • C++ 容器适配器与核心数据结构精解:栈、队列、Deque 底层实现与实战
  • C++ 模板初阶:泛型编程基础

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online