Nginx配置文件结构
# nginx 配置文件结构
提到nginx就回答反向代理,知道 location 各种配置,知道负载均衡等等,但是对配置文件结构又挺模糊的,于是用这篇文章来记录
nginx配置文件由多个嵌套的块组成,每个块定义不同的功能和配置
# 全局
位于配置文件最顶部,不包含在任何其他块中,影响Nginx全局行为
可配置项:
- user: 指定Nginx工作进程的用户和组(例如:user nginx;)
- worker_processes: 设置工作进程数量(通常设为CPU核心数,或auto自动检测)
- error_log: 定义错误日志路径和级别(如:error_log /var/log/nginx/error.log warn;)
- pid: 指定主进程PID文件路径(如:pid /var/run/nginx.pid;)
- daemon: 是否以守护进程方式运行(默认 on,生产环境通常保留)
- include: 引入其他配置文件(如:include /etc/nginx/conf.d/*.conf;)
# Events
配置网络连接处理方式,影响Nginx的并发性能
可配置项
- worker_connections: 每个工作进程的最大连接数(如:worker_connections 4096;)
- multi_accept: 是否允许一个进程同时接受多个连接(默认on)
- use: 指定事件驱动模型(如:use epoll;,Linux下默认使用epoll)
- accept_mutex: 防止“惊群效应”(默认on)
# Http
定义HTTP服务的全局配置,包含多个 server 块和 upstream 块
可配置项
- include: 引入MIME类型文件(如:include mime.types;)
- default_type: 设置默认MIME类型(如:default_type application/octet-stream;)
- log_format: 自定义日志格式(如:定义日志字段)
- access_log: 设置访问日志路径和格式(如:access_log /var/log/nginx/access.log main;)
- sendfile: 启用sendfile系统调用(提升文件传输性能,默认on)
- keepalive_timeout: 长连接超时时间(如:keepalive_timeout 65;)
- gzip: 启用Gzip压缩(如:gzip on;)
- client_max_body_size: 限制客户端请求体大小(如:client_max_body_size 10m;)
- proxy_cache_path: 配置缓存路径(用于反向代理缓存)
application/octet-stream:这是二进制流类型,表示“未知的二进制文件”。浏览器收到该类型文件时,会 直接下载 而非尝试渲染,在为了系统安全而设置某些响应头后如果不在 nginx 主动设置文件响应类型,浏览器很可能无法正常渲染
# Server
定义虚拟主机(Virtual Host),可包含多个 location 块
可配置项:
- listen: 监听的端口和IP(如:listen 80;或listen [::]:443 ssl;)
- server_name: 主机名(如:server_name example.com;)
- root: 网站根目录(如:root /var/www/html;)
- index: 默认首页文件(如:index index.html;)
- location: 路由匹配规则
- error_page: 自定义错误页面(如:error_page 404 /404.html;)
- ssl_certificate: SSL证书路径(HTTPS配置时使用)
# Location
在 server 或 location 块内定义,根据请求路径匹配处理规则
可配置项:
- proxy_pass: 反向代理到后端服务器(如:proxy_pass http://backend;)
- root/alias: 静态文件路径(注意root是拼接路径,alias是替换路径)
- try_files: 尝试加载文件或重定向(如:try_files $uri $uri/ /index.html;)
- rewrite: URL重写规则(如:rewrite ^/old(.*) /new$1 permanent;)
- proxy_set_header: 设置代理请求头(如:proxy_set_header X-Real-IP $remote_addr;)
- limit_req: 限制请求频率(如:limit_req zone=one burst=5;)
# upstream
定义服务器组,用于负载均衡或故障转移
可配置项
- server: 后端服务器地址及权重(如:server backend1:80 weight=3;)
- backup: 指定备用服务器(如:server backup_backend:80 backup;)
- max_fails: 失败次数阈值(如:max_fails=3;)
- fail_timeout: 失败后的暂停时间(如:fail_timeout=30s;)
- ip_hash: 基于IP的会话保持(如:ip_hash;)
# 总结
全局块
└─ events 块(可选)
└─ http 块(必须,若配置 HTTP 服务)
├─ upstream 块(可选,多个)
├─ server 块(可选,多个)
│ └─ location 块(可选,多个)
└─ 其他全局 HTTP 配置(如日志、代理设置等)
------------------------------------------
#全局块
user nobody; # 运行进程的用户
worker_processes 4; # 工作进程数量
error_log /var/log/nginx/error.log; # 错误日志路径
#event块
events {
worker_connections 1024; # 每个 worker 进程的最大连接数
use epoll; # 事件驱动模型(Linux 默认)
}
#http块
http {
include mime.types; # 包含 MIME 类型文件
default_type application/octet-stream; # 默认 MIME 类型
sendfile on; # 开启 sendfile
# 可以包含多个 upstream 块
upstream backend {
server 127.0.0.1:3000;
}
# 可以包含多个 server 块
server {
listen 80;
server_name example.com;
location / { proxy_pass http://backend; }
}
server {
listen 80;
server_name another.example.com;
# 其他配置...
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41