Nginx可靠配置需结构清晰、分层明确、可验证:worker_processes auto与worker_connections 4096须匹配ulimit -n≥65535;安全头覆盖XSS/点击劫持/MIME欺骗;日志含request_time以支持可观测性;权限、拦截规则及语法验证(nginx -t)缺一不可。

直接用一套结构清晰、分层明确、可验证的配置模板,比零散堆砌参数更可靠。关键不是“加得全”,而是每项配置有明确归属(性能/安全/审计)、有系统级配套(如 ulimit)、有生效验证路径。
worker_processes 与 worker_connections 必须匹配系统限制
这两个参数决定 Nginx 并发能力上限,但设高了没用,反而触发内核拒绝连接。
-
worker_processes auto是推荐起点,它会读取 CPU 核心数;若混部或容器环境,显式设为2或4更稳 -
worker_connections 4096需同步检查系统级文件描述符限制:ulimit -n至少为65535,否则实际连接数会被截断 - 必须在
/etc/security/limits.conf中持久化:添加nginx soft nofile 65535和nginx hard nofile 65535 - 别漏掉
use epoll;(Linux)和multi_accept on;,否则事件模型效率打折扣
安全头必须覆盖 XSS、点击劫持、MIME 欺骗三类基础攻击
只关 server_tokens 是假安全。真实攻击链往往从浏览器行为入手,响应头才是第一道防线。
-
add_header X-Content-Type-Options "nosniff" always;:阻止浏览器根据响应体猜测类型,防 XSS 诱饵 -
add_header X-Frame-Options "SAMEORIGIN" always;:禁止跨域 iframe 嵌入,防点击劫持 -
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https:;" always;:按业务收紧,初期可先放开script-src内联脚本,再逐步收敛 - 避免用
if ($request_method = TRACE) { return 405; },改用limit_except GET POST { deny all; },更高效且不触发重写陷阱
日志格式必须嵌入 request_time 并适配日志采集器
可观测性不是“能看日志”,而是“能自动归因”。没有耗时字段的日志,在故障排查中等于无效数据。
- 自定义
log_format至少包含:$remote_addr $request_time $upstream_response_time "$request" $status $body_bytes_sent - 确保
access_log使用该格式,并指向可被filebeat或promtail监控的路径(如/var/log/nginx/access.log) - 禁用
autoindex on;,防止目录遍历暴露结构;敏感后缀如.conf、.log、.bak必须用location ~* \.(conf|log|bak)$ { deny all; }拦截 - 每次修改配置后,必须执行
nginx -t验证语法,再nginx -s reload,不能跳过-t
真正容易被忽略的是权限校准:配置文件(/etc/nginx/nginx.conf)应为 644,日志目录(/var/log/nginx/)属主应为 root:nginx 且权限为 750,运行用户(nginx)必须是 nologin 且无 shell 权限——这些不靠配置文件,而靠 chown 和 chmod 手动落实。



















