一、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 NOTHING