Nginx 生产环境安全配置加固

以下是Nginx生产环境安全配置加固的综合方案,结合多个技术实践和行业标准整理:

一、基础安全防护

1‌. 隐藏版本信息‌

  • httpserver块添加server_tokens off;,避免暴露Nginx版本号‌。
  • 使用headers-more-nginx-module模块彻底移除响应头中的Server: nginx标识‌。

‌2. 访问控制与权限限制‌

  • 使用allow/deny指令限制敏感接口的IP访问范围‌。
  • 通过worker_processesworker_connections合理配置并发连接数‌。
  • 以非root用户运行Nginx进程,并通过user指令指定低权限账户‌。

3‌. SSL/TLS加固‌

  • 启用TLS 1.3协议,禁用SSLv2/SSLv3等不安全协议‌。
  • 配置强加密套件,例如:
nginx 复制代码
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;
  • 强制HTTP跳转HTTPS,并启用HSTS头部‌。

二、请求与资源防护

1‌. 请求限制与防DDoS‌

  • 设置limit_conn_zone限制单IP并发连接数,limit_req_zone限制请求速率‌。
  • 配置超时参数:
nginx 复制代码
client_body_timeout 10s;
client_header_timeout 10s;
keepalive_timeout 5s;
  • 禁用TRACE方法:limit_except GET POST { deny all; }‌
  1. 目录与文件防护‌
  • 禁用自动目录索引:autoindex off;‌
  • 限制敏感文件访问:
nginx 复制代码
location ~* \.(conf|log|bak)$ { deny all; }

三、高级安全策略

‌1. 安全头部增强‌

  • 添加以下响应头防御XSS/点击劫持等攻击:
nginx 复制代码
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "SAMEORIGIN";
add_header Content-Security-Policy "default-src 'self'";
  • 使用X-XSS-Protection启用浏览器XSS过滤‌。

2‌. 模块与日志管理‌

  • 禁用未使用的模块(如autoindex)减少攻击面‌。
  • 启用访问日志和错误日志,配置log_format记录关键字段(如客户端IP、请求时间)‌。

四、运维规范

‌1. 配置与漏洞管理‌

  • 使用nginx -t测试配置后通过nginx -s reload热加载‌。
  • 定期通过nginx -V检查编译参数,确保未包含高危模块‌。
  1. 系统级防护‌
  • 结合防火墙限制仅开放必要端口(如80/443)‌。
  • 通过chmod设置配置文件权限(如nginx.conf设为640)‌。

以上配置需结合业务场景调整,建议使用nginx -t验证语法后分阶段实施‌。定期通过漏洞扫描工具(如CVE数据库)检查已知漏洞‌。

五、Nginx 生产环境标准配置方案

一、核心参数配置

1‌. 进程与连接控制‌

nginx 复制代码
worker_processes auto;  # 自动匹配CPU核心数 ‌:ml-citation{ref="1,3" data="citationList"}  
worker_cpu_affinity auto;  # CPU亲和性优化(需Nginx 1.9+)‌:ml-citation{ref="1,3" data="citationList"}  
worker_rlimit_nofile 65535;  # 进程最大文件句柄数 ‌:ml-citation{ref="3,4" data="citationList"}  
events {  
    use epoll;  # 高性能I/O模型(Linux环境)‌:ml-citation{ref="1,3" data="citationList"}  
    worker_connections 65535;  # 单进程最大并发连接数 ‌:ml-citation{ref="1,3" data="citationList"}  
    multi_accept on;  # 允许同时接受新连接 ‌:ml-citation{ref="3,4" data="citationList"}  
}

‌2. HTTP基础参数‌

nginx 复制代码
http {  
    client_max_body_size 20m;  # 文件上传大小限制 ‌:ml-citation{ref="4" data="citationList"}  
    client_header_buffer_size 4k;  # 请求头缓冲区 ‌:ml-citation{ref="1,3" data="citationList"}  
    keepalive_timeout 65s;  # 长连接超时 ‌:ml-citation{ref="2,4" data="citationList"}  
    sendfile on;  # 启用高效传输模式 ‌:ml-citation{ref="3,4" data="citationList"}  
    tcp_nopush on;  # 减少网络报文数量 ‌:ml-citation{ref="3,4" data="citationList"}  
}

二、安全配置规范

1‌. 信息隐藏与访问控制‌

nginx 复制代码
server_tokens off;  # 隐藏Nginx版本号 ‌:ml-citation{ref="1,2" data="citationList"}  
add_header Server "Custom";  # 自定义Server头(需headers-more模块)‌:ml-citation{ref="4,8" data="citationList"}  

location /nginx_status {  
    allow 192.168.1.0/24;  # 限制状态接口IP访问 ‌:ml-citation{ref="5,6" data="citationList"}  
    deny all;  
}

2‌. SSL/TLS优化‌

nginx 复制代码
ssl_protocols TLSv1.2 TLSv1.3;  # 禁用旧协议 ‌:ml-citation{ref="1,3" data="citationList"}  
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;  
ssl_prefer_server_ciphers on;  # 优先服务端加密套件 ‌:ml-citation{ref="1,3" data="citationList"}  
ssl_session_cache shared:SSL:10m;  # 会话缓存复用 ‌:ml-citation{ref="3,4" data="citationList"}

三、性能优化策略

‌1. 资源缓存与压缩‌

nginx 复制代码
gzip on;  # 启用GZIP压缩 ‌:ml-citation{ref="2,4" data="citationList"}  
gzip_min_length 1k;  # 最小压缩文件大小 ‌:ml-citation{ref="2,4" data="citationList"}  
open_file_cache max=1000 inactive=20s;  # 文件元数据缓存 ‌:ml-citation{ref="3,4" data="citationList"}  

proxy_cache_path /data/cache levels=1:2 keys_zone=mycache:10m;  # 反向代理缓存 ‌:ml-citation{ref="4" data="citationList"}

‌2. 负载均衡配置‌

nginx 复制代码
upstream backend {  
    server 10.0.0.1:80 weight=5;  # 权重分配 ‌:ml-citation{ref="3,4" data="citationList"}  
    server 10.0.0.2:80 backup;  # 备用节点 ‌:ml-citation{ref="3,4" data="citationList"}  
    keepalive 32;  # 长连接复用 ‌:ml-citation{ref="4" data="citationList"}  
    check interval=3000 rise=2 fall=3 timeout=1000;  # 健康检查(需nginx_upstream_check模块)‌:ml-citation{ref="6" data="citationList"}  
}

四、运维管理标准

‌1. 日志与监控‌

nginx 复制代码
log_format main '$remote_addr - $request_time - "$request" $status';  # 自定义日志格式 ‌:ml-citation{ref="2,3" data="citationList"}  
access_log /var/log/nginx/access.log main buffer=32k flush=5m;  # 缓冲写入日志 ‌:ml-citation{ref="4" data="citationList"}  
error_log /var/log/nginx/error.log warn;  # 错误日志级别控制 ‌:ml-citation{ref="3,4" data="citationList"}

‌2. 系统级加固‌

  • 配置文件权限:chmod 640 /etc/nginx/nginx.conf ‌
  • 以非特权用户运行:user www-data; ‌
  • 防火墙限制:仅开放80/443端口 ‌

实施说明‌

  1. 配置更新后必须执行 nginx -t 测试语法 ‌
  2. 推荐使用 logrotate 实现日志自动切割 ‌
  3. 生产环境建议采用 OpenResty 增强功能(如动态WAF)‌

七、配置样例:

标准配置

bash 复制代码
worker_processes auto;
 
events {
    worker_connections 1024;
}
 
http {
    include       mime.types;
    default_type  application/octet-stream;
 
    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  /var/log/nginx/access.log  main;
    error_log   /var/log/nginx/error.log warn;
 
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  65;
    types_hash_max_size 2048;
 
    server {
        listen       80;
        server_name  localhost;
 
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}

生产环境优化建议:

  1. 增加并发连接数:根据实际负载调整worker_connections。例如,如果服务器有16核CPU,可以设置为16384或更高。
  2. 启用Gzip压缩:减少传输数据量,提高页面加载速度。
  3. 配置HTTPS:增强安全性,使用TLS协议。
  4. 使用高效的日志格式:例如,使用json格式的日志,便于后续分析。
  5. 配置缓存:使用Nginx的proxy_cache或fastcgi_cache来缓存静态文件和动态内容。
  6. 负载均衡:在多个服务器之间分发请求,使用Nginx的upstream模块。
  7. 安全性增强:配置HTTP头以增强安全性,例如X-Frame-Options、Content-Security-Policy等。
  8. 监控和告警:设置监控和告警机制,以便及时发现并解决问题。
  9. 性能调优:调整keepalive_timeout、client_max_body_size等参数以适应高并发场景。
  10. 使用高效的第三方模块:例如ngx_pagespeed、ngx_brotli等。

优化后的配置示例:

bash 复制代码
worker_processes auto; # 基于CPU核心数自动设置工作进程数,通常设置为CPU核心数或2倍CPU核心数。
pid        /var/run/nginx.pid; # 设置nginx进程ID文件路径。
worker_rlimit_nofile 16384; # 设置单个工作进程可以打开的最大文件描述符数量。
events {
    worker_connections 16384; # 根据实际负载调整并发连接数。
    multi_accept on; # 允许每个工作进程同时接受多个新连接。
}
http {
    ... # 其他配置保持不变。
    gzip on; # 启用Gzip压缩。
    gzip_types text/plain application/xml text/css application/javascript application/json application/x-javascript text/xml application/xml+rss text/javascript; # 设置需要压缩的MIME类型。
    ... # 其他配置保持不变。
    server {
        listen       80 default_server; # 监听80端口,并设置为默认服务器。
        listen       443 ssl default_server; # 监听443端口,并启用SSL加密,设置为默认服务器。
        server_name  localhost; # 根据实际域名设置。
        ssl_certificate       /etc/ssl/certs/nginx-selfsigned.crt; # SSL证书路径。
        ssl_certificate_key   /etc/ssl/private/nginx-selfsigned.key; # SSL私钥路径。
        ssl_session_cache    shared:SSL:1m; # 设置SSL会话缓存。
        ssl_session_timeout  5m; # 设置SSL会话超时时间。
        ... # 其他配置保持不变。
        location / { ... } # 其他location配置保持不变。
        ... # 其他配置保持不变。
    }
相关推荐
fen_fen18 小时前
Oracle建表语句示例
数据库·oracle
Dxy123931021619 小时前
413 Request Entity Too Large 原因与解决方案
nginx
darkb1rd19 小时前
四、PHP文件包含漏洞深度解析
网络·安全·php
哆啦code梦19 小时前
2024 OWASP十大安全威胁解析
安全·系统安全·owasp top 10
CYpdpjRnUE19 小时前
光储一体机仿真模型搭建之旅
nginx
砚边数影20 小时前
数据可视化入门:Matplotlib 基础语法与折线图绘制
数据库·信息可视化·matplotlib·数据可视化·kingbase·数据库平替用金仓·金仓数据库
orange_tt20 小时前
Djiango配置Celery
数据库·sqlite
云小逸21 小时前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习
网络安全研究所21 小时前
AI安全提示词注入攻击如何操控你的智能助手?
人工智能·安全
肉包_51121 小时前
两个数据库互锁,用全局变量互锁会偶发软件卡死
开发语言·数据库·c++