以下是nginx生产环境安全配置加固的综合方案,结合多个技术实践和行业标准整理:
一、基础安全防护
1. 隐藏版本信息
- 在
http
或server
块添加server_tokens off;
,避免暴露nginx版本号。 - 使用
headers-more-nginx-module
模块彻底移除响应头中的server: nginx
标识。
2. 访问控制与权限限制
- 使用
allow/deny
指令限制敏感接口的ip访问范围。 - 通过
worker_processes
和worker_connections
合理配置并发连接数。 - 以非root用户运行nginx进程,并通过user指令指定低权限账户。
3. ssl/tls加固
- 启用tls 1.3协议,禁用sslv2/sslv3等不安全协议。
- 配置强加密套件,例如:
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
限制请求速率。 - 配置超时参数:
client_body_timeout 10s; client_header_timeout 10s; keepalive_timeout 5s;
- 禁用
trace
方法:limit_except get post { deny all; }
。
- 目录与文件防护
- 禁用自动目录索引:
autoindex off;
。 - 限制敏感文件访问:
location ~* \.(conf|log|bak)$ { deny all; }
三、高级安全策略
1. 安全头部增强
- 添加以下响应头防御xss/点击劫持等攻击:
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检查编译参数,确保未包含高危模块。
- 系统级防护
- 结合防火墙限制仅开放必要端口(如80/443)。
- 通过chmod设置配置文件权限(如nginx.conf设为640)。
以上配置需结合业务场景调整,建议使用nginx -t验证语法后分阶段实施。定期通过漏洞扫描工具(如cve数据库)检查已知漏洞。
五、nginx 生产环境标准配置方案
1、核心参数配置
1. 进程与连接控制
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基础参数
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"} }
2、安全配置规范
1. 信息隐藏与访问控制
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优化
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"}
3、性能优化策略
1. 资源缓存与压缩
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. 负载均衡配置
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"} }
4、运维管理标准
1. 日志与监控
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端口
实施说明
- 配置更新后必须执行 nginx -t 测试语法
- 推荐使用 logrotate 实现日志自动切割
- 生产环境建议采用 openresty 增强功能(如动态waf)
六、配置样例:
标准配置
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; } } }
生产环境优化建议:
- 增加并发连接数:根据实际负载调整worker_connections。例如,如果服务器有16核cpu,可以设置为16384或更高。
- 启用gzip压缩:减少传输数据量,提高页面加载速度。
- 配置https:增强安全性,使用tls协议。
- 使用高效的日志格式:例如,使用json格式的日志,便于后续分析。
- 配置缓存:使用nginx的proxy_cache或fastcgi_cache来缓存静态文件和动态内容。
- 负载均衡:在多个服务器之间分发请求,使用nginx的upstream模块。
- 安全性增强:配置http头以增强安全性,例如x-frame-options、content-security-policy等。
- 监控和告警:设置监控和告警机制,以便及时发现并解决问题。
- 性能调优:调整keepalive_timeout、client_max_body_size等参数以适应高并发场景。
- 使用高效的第三方模块:例如ngx_pagespeed、ngx_brotli等。
优化后的配置示例:
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配置保持不变。 ... # 其他配置保持不变。 }
到此这篇关于nginx 生产环境安全配置加固的实现的文章就介绍到这了,更多相关nginx 生产环境安全加固内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论