Loading... ``` # 背景概要 年初 CloudCone 由于 Virtualizor 面板的安全漏洞遭遇入侵,名下部分VPS的数据惨遭清空。丢失的配置和网站文件只能靠自己重建,在重新部署服务器环境的过程中,顺带整理记录下一些Nginx配置的常用配置。 # 基本结构 ```ini nginx.conf ├── main # 全局配置,定义进程运行参数 │ ├── events # 配置事件处理模型与连接方式 │ ├── http # HTTP/HTTPS 服务的顶层容器 │ │ ├── upstream # 定义后端服务器组,用于负载均衡 │ │ ├── upstream │ │ ├── server # 定义虚拟主机,处理特定域名或端口的请求 │ │ │ ├── location # 根据 URI 路径匹配,定义请求处理规则 │ │ │ ├── location │ │ │ └── location │ │ ├── server │ │ │ ├── location │ │ │ └── location │ │ └── ... │ └── ... └── ... ``` # 模块简介 ## main ```nginx # ==================== Nginx Main 全局块配置 ==================== # [用户与组] # 定义 Worker 进程的运行用户/用户组 user www www; # [工作进程数] # 定义 Nginx 工作进程的数量 # 推荐设置为 auto, 自动检测 CPU 核心数并启动对应数量的 Worker 进程 worker_processes auto; # [错误日志] # 定义错误日志的存储路径和记录级别 # 级别可选:debug | info | notice | warn | error | crit error_log /var/log/nginx/error.log warn; # [PID 文件路径] # 存放 Master 进程 ID 的文件路径 pid /run/nginx.pid; # [动态模块加载] # 动态加载编译模块,便于加载编译时未内联的模块 # load_module modules/ngx_http_headers_more_filter_module.so; # [工作进程调度优先级] # 调整 Worker 进程的 CPU 时间片权重,范围 -20(最高) 到 19(最低)。 # worker_priority 0; ``` ## **events**块 ```nginx # ==================== Nginx events 块配置 ==================== events { # [事件驱动模型] # 指定使用哪种 I/O 多路复用机制,不设置时 Nginx 会自动选择最优模型 # Linux 系统推荐 epoll,FreeBSD 推荐 kqueue。 use epoll; # [单个 Worker 进程的最大并发连接数] # 每个 Worker 可同时处理的最大客户端连接数,包含代理连接。 worker_connections 2048; # [是否允许一次接受所有新连接] # 设为 on 时,Worker 会在收到新连接通知时尽可能多地 accept 连接。 # 高并发短连接场景建议开启。 multi_accept on; # [互斥锁开关 - 惊群问题处理] # 默认 off,新版本已废弃该指令。on 表示多个 Worker 轮流 accept 新连接。 # 当内核支持 EPOLLEXCLUSIVE 或 SO_REUSEPORT 时,建议保持默认 off。 accept_mutex off; # [互斥锁获取失败后的等待时间] # 仅当 accept_mutex 启用时有效,默认 500 毫秒。 # accept_mutex_delay 500ms; } ``` ## http块 ```nginx # ==================== Nginx http 块配置 ==================== http { # [MIME 类型文件包含] # 引入外部文件定义文件扩展名到 Content-Type 的映射,确保浏览器正确解析响应。 include /etc/nginx/mime.types; # [默认 MIME 类型] # 当文件扩展名未在 mime.types 中匹配到时,使用的默认类型。 default_type application/octet-stream; # [日志格式定义] # 自定义访问日志的字段与格式,main 为格式名称,便于后续 access_log 引用。 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # [HTTP 级别访问日志] # 记录所有 HTTP 请求,路径与格式可定义。关闭使用 off,或输出到 syslog。 access_log /var/log/nginx/access.log main; # [高效文件传输] # sendfile 启用内核态零拷贝传输,减少上下文切换与数据复制,极大提高静态文件性能。 sendfile on; # TCP_CORK 累积数据包再发送,与 sendfile 配合减少网络包数量。仅在 sendfile on 时有效。 tcp_nopush on; # 禁用 Nagle 算法,小数据包立即发送,降低延迟。适合 keep-alive 连接。 tcp_nodelay on; # [长连接超时] # 客户端 keep-alive 连接的超时时间,超过此时间无请求则断开。 keepalive_timeout 60; # 单个 keep-alive 连接上允许的最大请求数,超过后关闭连接。 keepalive_requests 100; # [客户端相关限制] # 客户端请求体最大大小(如文件上传),0 表示不限制。超出返回 413。 client_max_body_size 10m; # 客户端请求头缓冲区大小,当请求头过大时使用更大的缓冲区。 client_header_buffer_size 1k; # 大请求头的缓冲区数量和大小,超出则返回 414 请求头过长。 large_client_header_buffers 4 8k; # [响应优化] # 隐藏 Nginx 版本号,增强安全性。 server_tokens off; # [Gzip 压缩] gzip on; gzip_comp_level 5; # 压缩等级 1-9,5 是性能与体积的平衡点 gzip_min_length 256; # 仅压缩大于此值的响应 gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_vary on; # 添加 Vary: Accept-Encoding 头,告知代理服务器内容已压缩,确保浏览器正确缓存压缩文件 gzip_disable "msie6"; # 禁用对 IE6 的压缩 # [上游代理全局超时] # 以下超时通常放置在 server 或 location 中根据需求覆盖。 # 与上游服务器建立连接的超时时间 proxy_connect_timeout 60s; # 从上游服务器读取响应的超时时间 proxy_read_timeout 60s; # 向上游服务器发送请求的超时时间 proxy_send_timeout 60s; # [其他常见全局设置] # 开启目录列表功能(默认 off,生产环境建议关闭) autoindex off; # 配置 server_names_hash 桶大小,当虚拟主机域名较多时增加此值。 server_names_hash_bucket_size 64; # [包含站点配置] # 引入独立文件或目录下的虚拟主机配置,便于管理。 include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } ``` 最后修改:2026 年 05 月 30 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏