Nginx?生產(chǎn)環(huán)境安全配置加固的實(shí)現(xiàn)
以下是Nginx生產(chǎn)環(huán)境安全配置加固的綜合方案,結(jié)合多個(gè)技術(shù)實(shí)踐和行業(yè)標(biāo)準(zhǔn)整理:
一、基礎(chǔ)安全防護(hù)
1. 隱藏版本信息
- 在
http
或server
塊添加server_tokens off;
,避免暴露Nginx版本號(hào)。 - 使用
headers-more-nginx-module
模塊徹底移除響應(yīng)頭中的Server: nginx
標(biāo)識(shí)。
2. 訪問(wèn)控制與權(quán)限限制
- 使用
allow/deny
指令限制敏感接口的IP訪問(wèn)范圍。 - 通過(guò)
worker_processes
和worker_connections
合理配置并發(fā)連接數(shù)。 - 以非root用戶運(yùn)行Nginx進(jìn)程,并通過(guò)user指令指定低權(quán)限賬戶。
3. SSL/TLS加固
- 啟用TLS 1.3協(xié)議,禁用SSLv2/SSLv3等不安全協(xié)議。
- 配置強(qiáng)加密套件,例如:
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; ssl_prefer_server_ciphers on;
- 強(qiáng)制HTTP跳轉(zhuǎn)HTTPS,并啟用HSTS頭部。
二、請(qǐng)求與資源防護(hù)
1. 請(qǐng)求限制與防DDoS
- 設(shè)置
limit_conn_zone
限制單IP并發(fā)連接數(shù),limit_req_zone
限制請(qǐng)求速率。 - 配置超時(shí)參數(shù):
client_body_timeout 10s; client_header_timeout 10s; keepalive_timeout 5s;
- 禁用
TRACE
方法:limit_except GET POST { deny all; }
。
- 目錄與文件防護(hù)
- 禁用自動(dòng)目錄索引:
autoindex off;
。 - 限制敏感文件訪問(wèn):
location ~* \.(conf|log|bak)$ { deny all; }
三、高級(jí)安全策略
1. 安全頭部增強(qiáng)
- 添加以下響應(yīng)頭防御XSS/點(diǎn)擊劫持等攻擊:
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過(guò)濾。
2. 模塊與日志管理
- 禁用未使用的模塊(如autoindex)減少攻擊面。
- 啟用訪問(wèn)日志和錯(cuò)誤日志,配置log_format記錄關(guān)鍵字段(如客戶端IP、請(qǐng)求時(shí)間)。
四、運(yùn)維規(guī)范
1. 配置與漏洞管理
- 使用nginx -t測(cè)試配置后通過(guò)nginx -s reload熱加載。
- 定期通過(guò)nginx -V檢查編譯參數(shù),確保未包含高危模塊。
- 系統(tǒng)級(jí)防護(hù)
- 結(jié)合防火墻限制僅開(kāi)放必要端口(如80/443)。
- 通過(guò)chmod設(shè)置配置文件權(quán)限(如nginx.conf設(shè)為640)。
以上配置需結(jié)合業(yè)務(wù)場(chǎng)景調(diào)整,建議使用nginx -t驗(yàn)證語(yǔ)法后分階段實(shí)施。定期通過(guò)漏洞掃描工具(如CVE數(shù)據(jù)庫(kù))檢查已知漏洞。
五、Nginx 生產(chǎn)環(huán)境標(biāo)準(zhǔn)配置方案
1、核心參數(shù)配置
1. 進(jìn)程與連接控制
worker_processes auto; # 自動(dòng)匹配CPU核心數(shù) ?:ml-citation{ref="1,3" data="citationList"} worker_cpu_affinity auto; # CPU親和性優(yōu)化(需Nginx 1.9+)?:ml-citation{ref="1,3" data="citationList"} worker_rlimit_nofile 65535; # 進(jìn)程最大文件句柄數(shù) ?:ml-citation{ref="3,4" data="citationList"} events { use epoll; # 高性能I/O模型(Linux環(huán)境)?:ml-citation{ref="1,3" data="citationList"} worker_connections 65535; # 單進(jìn)程最大并發(fā)連接數(shù) ?:ml-citation{ref="1,3" data="citationList"} multi_accept on; # 允許同時(shí)接受新連接 ?:ml-citation{ref="3,4" data="citationList"} }
2. HTTP基礎(chǔ)參數(shù)
http { client_max_body_size 20m; # 文件上傳大小限制 ?:ml-citation{ref="4" data="citationList"} client_header_buffer_size 4k; # 請(qǐng)求頭緩沖區(qū) ?:ml-citation{ref="1,3" data="citationList"} keepalive_timeout 65s; # 長(zhǎng)連接超時(shí) ?:ml-citation{ref="2,4" data="citationList"} sendfile on; # 啟用高效傳輸模式 ?:ml-citation{ref="3,4" data="citationList"} tcp_nopush on; # 減少網(wǎng)絡(luò)報(bào)文數(shù)量 ?:ml-citation{ref="3,4" data="citationList"} }
2、安全配置規(guī)范
1. 信息隱藏與訪問(wèn)控制
server_tokens off; # 隱藏Nginx版本號(hào) ?: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; # 限制狀態(tài)接口IP訪問(wèn) ?:ml-citation{ref="5,6" data="citationList"} deny all; }
2. SSL/TLS優(yōu)化
ssl_protocols TLSv1.2 TLSv1.3; # 禁用舊協(xié)議 ?:ml-citation{ref="1,3" data="citationList"} ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; # 優(yōu)先服務(wù)端加密套件 ?:ml-citation{ref="1,3" data="citationList"} ssl_session_cache shared:SSL:10m; # 會(huì)話緩存復(fù)用 ?:ml-citation{ref="3,4" data="citationList"}
3、性能優(yōu)化策略
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; # 文件元數(shù)據(jù)緩存 ?: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. 負(fù)載均衡配置
upstream backend { server 10.0.0.1:80 weight=5; # 權(quán)重分配 ?:ml-citation{ref="3,4" data="citationList"} server 10.0.0.2:80 backup; # 備用節(jié)點(diǎn) ?:ml-citation{ref="3,4" data="citationList"} keepalive 32; # 長(zhǎng)連接復(fù)用 ?: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、運(yùn)維管理標(biāo)準(zhǔn)
1. 日志與監(jiān)控
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; # 緩沖寫(xiě)入日志 ?:ml-citation{ref="4" data="citationList"} error_log /var/log/nginx/error.log warn; # 錯(cuò)誤日志級(jí)別控制 ?:ml-citation{ref="3,4" data="citationList"}
2. 系統(tǒng)級(jí)加固
- 配置文件權(quán)限:chmod 640 /etc/nginx/nginx.conf
- 以非特權(quán)用戶運(yùn)行:user www-data;
- 防火墻限制:僅開(kāi)放80/443端口
實(shí)施說(shuō)明
- 配置更新后必須執(zhí)行 nginx -t 測(cè)試語(yǔ)法
- 推薦使用 logrotate 實(shí)現(xiàn)日志自動(dòng)切割
- 生產(chǎn)環(huán)境建議采用 OpenResty 增強(qiáng)功能(如動(dòng)態(tài)WAF)
六、配置樣例:
標(biāo)準(zhǔn)配置
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; } } }
生產(chǎn)環(huán)境優(yōu)化建議:
- 增加并發(fā)連接數(shù):根據(jù)實(shí)際負(fù)載調(diào)整worker_connections。例如,如果服務(wù)器有16核CPU,可以設(shè)置為16384或更高。
- 啟用Gzip壓縮:減少傳輸數(shù)據(jù)量,提高頁(yè)面加載速度。
- 配置HTTPS:增強(qiáng)安全性,使用TLS協(xié)議。
- 使用高效的日志格式:例如,使用json格式的日志,便于后續(xù)分析。
- 配置緩存:使用Nginx的proxy_cache或fastcgi_cache來(lái)緩存靜態(tài)文件和動(dòng)態(tài)內(nèi)容。
- 負(fù)載均衡:在多個(gè)服務(wù)器之間分發(fā)請(qǐng)求,使用Nginx的upstream模塊。
- 安全性增強(qiáng):配置HTTP頭以增強(qiáng)安全性,例如X-Frame-Options、Content-Security-Policy等。
- 監(jiān)控和告警:設(shè)置監(jiān)控和告警機(jī)制,以便及時(shí)發(fā)現(xiàn)并解決問(wèn)題。
- 性能調(diào)優(yōu):調(diào)整keepalive_timeout、client_max_body_size等參數(shù)以適應(yīng)高并發(fā)場(chǎng)景。
- 使用高效的第三方模塊:例如ngx_pagespeed、ngx_brotli等。
優(yōu)化后的配置示例:
worker_processes auto; # 基于CPU核心數(shù)自動(dòng)設(shè)置工作進(jìn)程數(shù),通常設(shè)置為CPU核心數(shù)或2倍CPU核心數(shù)。 pid /var/run/nginx.pid; # 設(shè)置nginx進(jìn)程ID文件路徑。 worker_rlimit_nofile 16384; # 設(shè)置單個(gè)工作進(jìn)程可以打開(kāi)的最大文件描述符數(shù)量。 events { worker_connections 16384; # 根據(jù)實(shí)際負(fù)載調(diào)整并發(fā)連接數(shù)。 multi_accept on; # 允許每個(gè)工作進(jìn)程同時(shí)接受多個(gè)新連接。 } 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; # 設(shè)置需要壓縮的MIME類型。 ... # 其他配置保持不變。 server { listen 80 default_server; # 監(jiān)聽(tīng)80端口,并設(shè)置為默認(rèn)服務(wù)器。 listen 443 ssl default_server; # 監(jiān)聽(tīng)443端口,并啟用SSL加密,設(shè)置為默認(rèn)服務(wù)器。 server_name localhost; # 根據(jù)實(shí)際域名設(shè)置。 ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; # SSL證書(shū)路徑。 ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; # SSL私鑰路徑。 ssl_session_cache shared:SSL:1m; # 設(shè)置SSL會(huì)話緩存。 ssl_session_timeout 5m; # 設(shè)置SSL會(huì)話超時(shí)時(shí)間。 ... # 其他配置保持不變。 location / { ... } # 其他location配置保持不變。 ... # 其他配置保持不變。 }
到此這篇關(guān)于Nginx 生產(chǎn)環(huán)境安全配置加固的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx 生產(chǎn)環(huán)境安全加固內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Nginx處理Vue開(kāi)發(fā)環(huán)境的跨域的方法
這篇文章主要介紹了利用Nginx處理Vue開(kāi)發(fā)環(huán)境的跨域的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06解決Nginx 配置 proxy_pass 后 返回404問(wèn)題
這篇文章主要介紹了Nginx 配置 proxy_pass 后 返回404問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01NGINX報(bào)錯(cuò)413 Request Entity Too Large的問(wèn)題解決
Nginx 413錯(cuò)誤表示請(qǐng)求實(shí)體太大,本文主要介紹了NGINX報(bào)錯(cuò)413 Request Entity Too Large的問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08Nginx漏洞復(fù)現(xiàn)的問(wèn)題案例解析
這篇文章主要介紹了Nginx解析漏洞復(fù)現(xiàn),這個(gè)漏洞其實(shí)是由php.ini中cgi.fix pathinfo選項(xiàng)與php-fpm的配置一起導(dǎo)致的,防范的話,只需在php-fpm配置文件中設(shè)置security.limit_extensions=.php,重啟一下服務(wù)即可,本文講解的非常詳細(xì),需要的朋友可以參考下2024-01-01Nginx+Windows搭建域名訪問(wèn)環(huán)境的操作方法
這篇文章主要介紹了Nginx搭建域名訪問(wèn)環(huán)境,包括nginx配置文件的相關(guān)介紹及對(duì)nginx配置文件的分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03nginx配置SSL證書(shū)實(shí)現(xiàn)https服務(wù)的方法
這篇文章主要介紹了nginx配置SSL證書(shū)實(shí)現(xiàn)https服務(wù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05