AI智能摘要
文章详述 Nginx 的核心配置结构:全局块、events 块、http 块,并给出各关键指令及典型用例;随后演示静态文件服务、反向代理、负载均衡、HTTPS 安全配置、代理缓存以及访问日志、IP 限制、限流等实战示例,最后提供配置生效命令与扩展学习建议。
— 此摘要由AI分析文章内容生成,仅供参考。
一、Nginx 配置文件结构概述
Nginx 的核心配置文件通常位于 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf,其配置结构主要分为以下三个核心块:

1. 全局块(main)
- 作用:影响 Nginx 整体运行的全局参数,如用户权限、进程管理、日志路径等。
- 关键配置项:
user:指定运行 Nginx 的用户(默认nginx)。worker_processes:设置工作进程数,建议设为auto自动匹配 CPU 核心数。error_log:错误日志路径及日志级别(如warn、error)。pid:进程 PID 文件位置,用于标识 Nginx 主进程。
2. events 块
- 作用:配置网络连接相关参数,优化 Nginx 的事件处理模型。
- 关键配置项:
worker_connections:每个工作进程的最大连接数(默认 1024)。use:指定事件驱动模型,Linux 系统推荐使用epoll(高效的 I/O 多路复用模型)。
3. http 块
- 作用:定义 HTTP 服务器的具体行为,如虚拟主机、反向代理、静态资源服务等。
- 子模块:包含多个
server块(虚拟主机配置),每个server块可独立配置域名、端口、路由等。
二、全局配置与 events 块示例
user nginx; # 运行 Nginx 的用户
worker_processes auto; # 自动匹配 CPU 核心数
error_log /var/log/nginx/error.log warn; # 错误日志路径及级别
pid /var/run/nginx.pid; # 进程 PID 文件位置
events {
worker_connections 1024; # 每个 worker 进程的最大连接数
use epoll; # 使用 epoll 事件模型(Linux 系统)
}
三、静态文件服务配置
Nginx 擅长高效托管静态资源(如 HTML、CSS、JS、图片等),以下是基础配置示例:
1. 基础静态服务器
http {
server {
listen 80; # 监听 80 端口
server_name example.com; # 绑定域名或 IP
location / {
root /var/www/html; # 静态文件根目录
index index.html; # 默认首页文件
}
# 单独配置图片缓存(jpg/png/gif 格式)
location ~* .(jpg|png|gif)$ {
root /var/www/images; # 图片独立存储路径
expires 30d; # 客户端缓存 30 天(减少重复请求)
}
}
}
2. 关键指令说明
root:指定静态文件在服务器上的物理路径。index:定义访问目录时的默认文件(如index.html)。expires:通过设置 HTTP 响应头Cache-Control,控制浏览器缓存静态资源的时间,减少服务器压力。
四、反向代理与负载均衡配置
1. 基本反向代理
将请求转发到后端服务器(如 Tomcat、Node.js 应用等):
server {
listen 80;
server_name api.example.com; # 反向代理域名
location / {
proxy_pass http://127.0.0.1:8080; # 转发到本地 8080 端口的后端服务
proxy_set_header Host $host; # 传递原始 Host 头(让后端识别请求域名)
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实 IP
}
}
2. 负载均衡(多后端服务器)
通过 upstream 定义服务器组,实现请求分发:
http {
upstream backend {
server 192.168.1.100:8080 weight=3; # 权重 3(处理更多请求)
server 192.168.1.101:8080; # 默认权重 1
server 192.168.1.102:8080 backup; # 备用服务器(仅主服务器故障时启用)
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend; # 代理到 upstream 定义的服务器组
proxy_next_upstream error timeout http_500; # 故障转移策略(错误/超时/500 错误时切换服务器)
}
}
}
五、HTTPS 安全配置(SSL/TLS)
1. 基本 HTTPS 站点配置
server {
listen 443 ssl; # 监听 443 端口并启用 SSL
server_name example.com;
# SSL 证书路径(需提前通过 Let's Encrypt 等方式获取)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 优化 SSL 性能与安全性
ssl_protocols TLSv1.2 TLSv1.3; # 启用安全的 TLS 协议版本
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; # 加密算法套件
ssl_prefer_server_ciphers on; # 优先使用服务器端加密算法
ssl_session_cache shared:SSL:10m; # SSL 会话缓存(减少重复握手)
ssl_session_timeout 10m; # 会话缓存超时时间
location / {
root /var/www/html;
index index.html;
}
}
# 强制 HTTP 跳转 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # 301 永久重定向
}
六、缓存优化(代理缓存)
通过缓存动态内容减少后端压力:
http {
# 定义缓存路径、层级结构、缓存区名称及大小
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
listen 80;
server_name cache.example.com;
location / {
proxy_pass http://backend; # 代理到后端服务
proxy_cache my_cache; # 启用名为 my_cache 的缓存区
proxy_cache_valid 200 302 10m; # 缓存 200/302 状态码的响应 10 分钟
proxy_cache_valid 404 1m; # 缓存 404 响应 1 分钟
proxy_cache_key "$scheme$host$request_uri"; # 缓存键(基于协议、域名、URI 生成)
}
}
}
七、日志与访问控制
1. 访问日志配置
http {
# 定义日志格式(包含客户端 IP、时间、请求方法、状态码等)
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; # 日志文件路径及格式
}
2. IP 访问限制(示例:仅允许特定 IP 访问 /admin 路径)
location /admin {
allow 192.168.1.100; # 允许访问的 IP
deny all; # 拒绝其他所有 IP
}
3. 限流配置(限制 API 接口请求频率)
http {
# 定义限流区域(基于客户端 IP,每秒允许 10 个请求)
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
server {
location /api {
limit_req zone=req_limit burst=20 nodelay; # 允许突发 20 个请求(平滑处理峰值)
proxy_pass http://backend;
}
}
}
八、配置生效与常用命令
- 测试配置文件语法: nginx -t
- 重新加载配置(无需重启服务): nginx -s reload
- 启动/停止服务: systemctl start nginx # 启动
systemctl stop nginx # 停止
九、扩展学习建议
- 官方文档:Nginx 官方文档提供了完整的指令说明和高级功能指南(如 Lua 脚本、动态模块)。
- 实战场景:结合具体业务需求,尝试配置动静分离、API 网关、高可用负载均衡等复杂场景。
Comments 37 条评论
这个教程太实用了,之前一直搞不懂nginx配置,现在终于明白了!
worker_connections设置多少比较合适啊?我们服务器经常卡顿
SSL配置那里写得很详细,刚好最近要给网站加HTTPS,收藏了👍
负载均衡那块能不能详细说说权重分配的具体算法?
@未来信号 负载均衡的权重是按比例分配的,比如3:1就是三倍请求量,轮询时体现
建议加个目录,内容太长了看着有点累
proxy_cache_path那个例子帮了大忙,之前缓存一直配不对
nginx -t检查语法真的很有用,避免了很多低级错误
@QuantumDrifter 语法检查确实救命,我昨天差点把线上搞挂
反向代理那里能不能加个websocket的配置示例?
@爱看剧的沙发 WebSocket配置加个proxy_set_header Upgrade $http_upgrade;就行,我刚试过很稳
限流配置很实用,网站终于不会被人刷爆了
求问楼主,这种配置能支持多少并发量?
@云端絮 并发量跟硬件和网络都有关,这种配置千并发基本没问题,万级要优化内核
worker_connections设太高反而会耗资源,一般1024够用,看服务器性能调
@奶油小饼干 看了半天没找到配置文件在哪,后来发现是安装路径不同,有点坑 😅
刚配完反向代理,WebSocket加上就通了,感谢楼主!
这个教程太及时了,正好在搞HTTPS迁移,一步到位
能不能出个动静分离的实战配置?期待后续更新
之前一直不知道怎么开缓存,现在终于搞定了,网站快多了
nginx配置原来这么灵活,学到了一堆新技巧👍
求问有没有办法监控每个location的访问频率?
server块还能嵌套?第一次见,涨知识了
@紫烟渺 server块不能直接嵌套,但可以include分文件,可能是你看错了
刚配完HTTPS跳转,果然安全又专业,感谢教程
@黯影 HTTPS跳转那段救大命,公司项目正需要这个,立马安排上
这个配置教程太全了,收藏慢慢研究
能不能讲讲nginx怎么配合CDN用啊?
我按这个配了缓存,QPS直接翻倍了,牛
楼主辛苦,配置这块终于看懂了
auto设置进程数真的很省心,适合新手
之前瞎配导致502频发,现在明白问题在哪了
求更新一篇nginx性能调优的实战经验!
worker_processes设成CPU核心数就行了吧?
教程太干货了,新手友好,连坑都提前避开了,爱了
看了半天终于搞懂upstream怎么玩了,backup服务器这个设计真妙
建议出个视频版?文字看着累,配图会更直观些🤔