Nginx 的配置文件结构非常清晰,采用**分层、块状(Block)**的结构
通常主配置文件位于 /etc/nginx/nginx.conf,而具体的站点配置位于 /etc/nginx/conf.d/ 或 /etc/nginx/sites-enabled/。
我们将 Nginx 配置分为 五个核心层级 来详解:
一、 核心层级结构
# 1. 全局块 (Global)
user nginx;
worker_processes auto;
events {
# 2. events块 (网络连接设置)
worker_connections 1024;
}
http {
# 3. http块 (全局Web参数)
include mime.types;
default_type application/octet-stream;
upstream myserver {
# 4. upstream块 (负载均衡配置)
server 127.0.0.1:8080;
}
server {
# 5. server块 (虚拟主机配置)
listen 80;
server_name localhost;
location / {
# location块 (路由匹配)
root html;
index index.html;
}
}
}
二、 详细指令详解
1. 全局块 (Main)
主要设置影响 Nginx 服务器整体运行的配置。
user: 运行 Nginx 的用户(建议非 root 以保证安全)。worker_processes: 工作进程数。通常设置为 CPU 核心数,或auto。error_log: 全局错误日志路径。
2. events 块
影响 Nginx 与用户的网络连接。
worker_connections: 每个进程允许的最大并发连接数(总并发 = 进程数 × 此值)。
3. http 块 (核心部分)
处理 HTTP 请求的主要配置,支持嵌套多个 server。
include: 引入其他配置文件(如mime.types告诉浏览器文件类型)。sendfile on: 开启高效文件传输模式,显著提升静态资源读取速度。keepalive_timeout: 连接超时时间。gzip on: 开启 Gzip 压缩,减少网络带宽消耗。
4. server 块 (虚拟主机)
一个 server 块代表一个网站。
listen 80: 监听的端口。server_name: 域名(如www.example.com)。ssl_certificate/ssl_certificate_key: 配置 HTTPS 证书路径。
5. location 块 (路由规则)
这是 Nginx 最灵活的地方,用于匹配特定的 URL。
- 匹配优先级:
= /path:精确匹配。^~ /path:前缀匹配,匹配后不再搜索正则。~或~*:正则匹配(区分/不区分大小写)。/:通用前缀匹配(最后保底)。
三、 常用功能配置示例
1. 反向代理 (最常用)
将请求转发到后端的应用服务器(如 Go、Java、Node.js)。
location /api/ {
proxy_pass http://127.0.0.1:8080; # 转发请求
proxy_set_header Host $host; # 传递真实主机名
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
2. 负载均衡 (Load Balancing)
upstream backend_cluster {
server 192.168.1.10:80 weight=3; # 权重分配
server 192.168.1.11:80;
server 192.168.1.12:80 backup; # 备用机
}
server {
location / {
proxy_pass http://backend_cluster;
}
}
3. 动静分离 (提高性能)
静态资源由 Nginx 直接处理,动态请求转发后端。
# 静态资源交给 Nginx
location /static/ {
root /var/www/my_app;
expires 30d; # 设置缓存时间
}
# 动态请求交给后端
location / {
proxy_pass http://localhost:5000;
}
4. HTTPS (SSL) 配置
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 强制 HTTP 跳转 HTTPS
error_page 497 https://$host$request_uri;
}
四、 常用管理命令
配置完成后,必须执行以下命令:
-
检查语法是否正确:
nginx -t(非常重要!修改配置后必做,防止语法错误导致服务宕机)
-
平滑重载配置:
nginx -s reload(不会中断当前已连接的用户,直接应用新配置)
-
查看状态(Linux 系统):
systemctl status nginx
五、 进阶优化建议
- 安全限制:使用
limit_conn和limit_req指令防止 DDoS 攻击和爬虫。 - 多配置文件:不要把所有网站写在
nginx.conf里,利用include /etc/nginx/conf.d/*.conf;让每个站点拥有独立的配置文件。 - 日志分割:为每个虚拟主机配置独立的
access_log,方便后续排查问题。