By 虎皮玄椒
1208 字
4 分钟
Nginx 配置文件详解
Nginx 配置文件详解
本文仅讲解常用配置,更加详细的内容请参阅官方文档。
nginx.conf
main 块
main 块是负责整个 nginx 服务器的部分,进行整体运行的配置。
进程管理
| 关键字 | 作用 | 示例 |
|---|---|---|
| worker_processes | 设置 Nginx 工作进程数(处理实际请求的进程) | worker_processes auto;worker_processes 4; |
| worker_priority | 设置工作进程的系统优先级(Linux 下对应 nice 值,范围 - 20~19,值越小优先级越高) | worker_priority -5; |
| worker_rlimit_nofile | 设置工作进程能打开的最大文件描述符数 | worker_rlimit_nofile 65535; |
日志
| 关键字 | 作用 | 示例 |
|---|---|---|
| error_log | 设置全局错误日志的路径、级别(优先级:debug < info < notice < warn < error < crit < alert < emerg) | error_log /var/log/nginx/error.log warn; |
文件路径与权限
| 关键字 | 作用 | 示例 |
|---|---|---|
| pid | 指定 Nginx 主进程 ID(PID)文件的存储路径 | pid /run/nginx.pid; |
| user | 设置 Nginx 工作进程的运行用户 / 用户组 | user www-data; |
events 块
events 块负责 nginx 服务器和用户的网络连接,对服务器的性能影响比较大。
| 关键字 | 作用 | 示例 |
|---|---|---|
| worker_connections | 设置单个工作进程能同时处理的最大连接数(包含所有类型连接:HTTP、反向代理、TCP 等) | worker_connections 1024; |
| multi_accept | 控制工作进程是否一次性接受所有可用的新连接(而非逐个接受) | multi_accept on; |
http 块
http 块是服务器配置中最复杂,最核心的部分。代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。同时,http 块中包含了 server 块,来负责各个虚拟主机的配置。
基础配置
| 关键字 | 作用 | 示例 |
|---|---|---|
| include | 引入外部配置文件 | include /etc/nginx/sites-enabled/*; |
| default_type | 设置默认 MIME 类型(请求无法识别类型时使用) | default_type application/octet-stream; |
| charset | 设置默认字符集 | charset utf-8; |
| server_tokens | 控制响应头是否显示 Nginx 版本号 | server_tokens off; |
| sendfile | 启用高效文件传输 | sendfile on; |
| tcp_nopush | 配合sendfile on使用,延迟发送 TCP 数据包,凑够大小再发送(减少网络包数量) | tcp_nopush on; |
SSL 配置
| 关键字 | 作用 | 示例 |
|---|---|---|
| ssl_protocols | 指定支持的 TLS 协议版本 | ssl_protocols TLSv1.2 TLSv1.3; |
| ssl_prefer_server_ciphers | 优先使用服务端指定的加密套件 | ssl_prefer_server_ciphers on; |
log 配置
| 关键字 | 作用 | 示例 |
|---|---|---|
| access_log | 设置访问日志路径 + 使用的日志格式 | access_log /var/log/nginx/access.log main; |
Gzip 配置
| 关键字 | 作用 | 示例 |
|---|---|---|
| gzip | 开启 Gzip 压缩 | gzip on; |
| gzip_types | 指定需要压缩的 MIME 类型 | gzip_types text/plain text/css application/json application/javascript; |
| gzip_comp_level | 压缩级别(1-9,级别越高压缩率越高、CPU 占用越高) | gzip_comp_level 6; |
sites.conf
一般虚拟主机的配置不直接写在 nginx 配置文件的 http 块中,而是分布在多个不同的 sites 配置文件中,这样方便模块化管理。每一个 server 块对应一个虚拟主机,负责处理特定域名 / 端口的请求。
待更新。。。
Nginx 配置文件样例
NOTE以下配置文件主要产自豆包。
nginx.conf
# ===================== 全局配置段 (main) =====================# Nginx 工作进程数,建议设置为 CPU 核心数(如 2、4),或 auto 自动适配worker_processes auto; # 自动匹配CPU核心worker_priority -5; # 提升工作进程优先级worker_rlimit_nofile 65535; # 增大文件描述符限制# 错误日志存放路径及级别(debug/info/notice/warn/error/crit)error_log /var/log/nginx/error.log warn;
user www-data; # 运行用户pid /run/nginx.pid; # Nginx 进程 PID 文件存放路径
# ===================== 事件配置段 (events) =====================events { worker_connections 1024; # 每个工作进程的最大并发连接数 multi_accept on; # 允许每个进程同时接受多个网络连接(提升并发性能)}
# ===================== HTTP 核心配置段 (http) =====================http { include /etc/nginx/mime.types; # 引入 MIME 类型映射文件(决定不同文件后缀的响应头 Content-Type) default_type application/octet-stream; # 默认 MIME 类型(未知后缀文件按二进制流处理) access_log /var/log/nginx/access.log; # 访问日志存放路径 sendfile on; # 开启高效文件传输模式 tcp_nopush on; gzip on; # 压缩配置 gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 需压缩的文件类型 include /etc/nginx/conf.d/sites.conf; # 引入虚拟主机配置文件}sites.conf
server { listen 80 default_server; # 监听80端口 listen [::]:80 default_server; # 支持IPv6 server_name example.com www.example.com; # 绑定的域名 return 301 https://$host$request_uri; # 强制HTTP跳转HTTPS(保留原域名)}server { listen 443 ssl default_server; # 监听443端口 listen [::]:443 ssl default_server; server_name example.com www.example.com; # 绑定的域名 root /var/www/example; # 网站根目录 index index.html index.htm index.php; # 默认首页
if ($host = example.com){ return 301 https://www.example.com$request_uri; }
# SSL配置 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3;
# 404错误返回站点根目录的404.html error_page 404 /404.html; location = /404.html { internal; } # 500/502/503/504错误返回50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { internal; } # 静态文件缓存配置 location ~* \.(css|js|png)$ { expires 7d; # 缓存7天 }}部分信息可能已经过时
