Nginx 配置文件解析
nginx 配置文件解析
1、nginx 配置文件模块介绍
nginx 配置文件采用 分层模块化设计,主要分为以下几大模块
模块层级 | 作用域 | 核心功能 |
---|---|---|
main | 全局生效 | 控制进程、日志、性能等全局参数 |
events | 网络连接层 | 定义连接处理模型与并发参数 |
http | HTTP 协议层 | 所有 HTTP 相关配置的容器(可嵌套多个 server) |
server | 虚拟主机层 | 定义域名、端口、根目录等主机参数 |
location | URL 路由层 | 根据 URL 规则处理请求 |
upstream | 负载均衡层 | 定义后端服务器集群与负载均衡 |
2、语法规则
2.1 基础语法
# 当行指令格式:指令名 参数1 参数2 ...;
worker_processes auto; # 指令以分好结尾# 指令块格式:指令名 { ... }
events {worker_connections: 1024; # 快内指令须缩进use epoll;
}# 注释:以 # 开头
# 错误日志 路径配置
error_log logs/error.log info;
2.3 高级特性
-
变量:使用
$
符号引用log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
-
正则匹配:
~
(区分大小写) 或~*
(不区分)location ~* \.(jpg|png)$ {...} # 匹配图片请求
-
文件包含:通过
include
提升可维护性include /etc/nginx/conf.d/*.conf; # 加载子配置文件
3、nginx 配置文件 解析
#user nobody; # 运行用户(安全加固必选项)
worker_processes 1; # 工作进程数(推荐设为 CPU 核心数)#error_log logs/error.log; # 错误日志与级别
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid; # 进程 PID 文件路径events {worker_connections 1024; # 每个工作进程允许的最大连接数。1024 表示每个工作进程最多可以处理 1024 个并发连接
}http {include mime.types; # 包含 MIME 类型定义文件,用于映射文件扩展名到 MIME 类型default_type application/octet-stream; # 默认的 MIME 类型。如果无法匹配到具体的 MIME 类型,则使用此值# 日志格式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 logs/access.log main;# 启用 高效文件传输模式,提升静态文件的传输性能sendfile on;# 启用后会发送数据包时进行优化(如合并小包),通常与 sendfile 配合使用tcp_nopush on;# 设置长连接的超时时间(单位:秒)。65 表示客户端在 65 秒内没有新请求时,连接会被关闭#keepalive_timeout 0;keepalive_timeout 65;# 启用 GZIP 压缩功能,减少传输数据量。gzip on;gzip_types text/plain text/css application/json; # 压缩文件类型gzip_min_length 1024; # 最小压缩文件大小gzip_comp_level 6; # 压缩级别(1-9)upstream backend {# 负载策略(默认轮询)server 192.168.1.100:8080 weight=5; # 权重分配(权重越高处理越多请求)server 192.168.1.101:8080;server backup.example.com:8080 backup; # 备用服务器# 会话保持策略(三选一)ip_hash; # 基于客户端IP哈希# least_conn; # 最少连接数优先# fair; # 第三方模块,响应时间优先keepalive 32; # 保持的长连接数(提升性能)}server {# 监听端口。80 是 HTTP 协议的默认端口listen 80;# 定义服务器名称:localhost 表示该虚拟主机响应针对 localhost 的请求server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;# 访问控制(白名单/黑名单)allow 192.168.1.0/24; # 允许指定网段deny all; # 拒绝其他所有IP# 定义根路径 的处理规则location / {# 设置 网站的根目录。 html 表示相对于 nginx 安装目录的 html 文件夹root html;# 指定默认首页文件index index.html index.htm;try_files $uri $uri/ /index.html; # 文件查找顺序(适用于SPA)}location /api/ {proxy_pass http://backend; # 反向代理到后端集群proxy_set_header Host $host; # 透传原始域名proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem; # 指定 SSL 证书 和 私钥的路径# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m; # 指定 SSL 会话缓存# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5; # 指定 加密算法# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}