最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從安全加固到性能調(diào)優(yōu)詳解Nginx中生產(chǎn)環(huán)境配置的完全指南

 更新時(shí)間:2026年04月30日 08:36:33   作者:前端小小棧  
本文系統(tǒng)梳理了Nginx在生產(chǎn)環(huán)境中常用的配置項(xiàng),每個(gè)配置都附帶解決的問題和實(shí)際應(yīng)用場景,幫助你構(gòu)建健壯,安全,高性能的Web服務(wù),有需要的小伙伴可以參考下

一、基礎(chǔ)安全配置

1. 隱藏 Nginx 版本信息

http {
    server_tokens off;
}

解決的問題:防止攻擊者通過版本號查找已知漏洞(如 nginx/1.18.0 暴露后可直接搜索該版本的 CVE)。

驗(yàn)證

curl -I http://your-site.com
# 沒有 server_tokens 時(shí):Server: nginx/1.18.0
# 開啟后:Server: nginx

2. 限制請求方法與大小

server {
    # 只允許常見 HTTP 方法
    if ($request_method !~ ^(GET|POST|PUT|DELETE|HEAD|OPTIONS|PATCH)$) {
        return 405;
    }
    
    # 限制請求體大?。ǚ乐箰阂馍蟼鞒笪募谋M內(nèi)存)
    client_max_body_size 10M;
    client_body_buffer_size 128k;
    
    # 限制請求頭大小(防止 Slowloris 攻擊)
    large_client_header_buffers 4 16k;
}
配置解決的問題
client_max_body_size防止惡意上傳超大文件導(dǎo)致內(nèi)存耗盡
client_body_buffer_size控制請求體緩沖區(qū),超出部分寫入臨時(shí)文件
large_client_header_buffers防止通過超長請求頭進(jìn)行的 DoS 攻擊

3. 禁用不安全的 HTTP 方法

location / {
    # 顯式拒絕 TRACE 和 TRACK 方法(可能用于 XST 攻擊)
    if ($request_method ~ ^(TRACE|TRACK)$) {
        return 405;
    }
}

二、HTTPS / SSL 安全配置

4. 強(qiáng)制 HTTPS 跳轉(zhuǎn)

server {
    listen 80;
    server_name example.com;
    # 301 永久重定向到 HTTPS
    return 301 https://$host$request_uri;
}

解決的問題:確保所有流量走加密通道,防止中間人竊 聽。

5. 現(xiàn)代 TLS 配置

server {
    listen 443 ssl http2;
    
    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;
    
    # 只啟用安全的 TLS 版本
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # 強(qiáng)加密套件,優(yōu)先使用 ECDHE 實(shí)現(xiàn)前向保密
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
    
    ssl_prefer_server_ciphers on;
    
    # 會(huì)話復(fù)用,減少 TLS 握手開銷
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    
    # OCSP Stapling,加速證書驗(yàn)證
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 8.8.8.8 valid=300s;
}
配置解決的問題
ssl_protocols TLSv1.2 TLSv1.3禁用存在漏洞的 SSLv2/3 和 TLSv1.0/1.1
ssl_ciphers只使用強(qiáng)加密算法,防止降級攻擊
ssl_session_cache復(fù)用 TLS 會(huì)話,減少握手延遲
ssl_stapling服務(wù)器主動(dòng)提供證書吊銷狀態(tài),避免客戶端額外查詢

6. HSTS(HTTP Strict Transport Security)

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

解決的問題:告訴瀏覽器永遠(yuǎn)用 HTTPS 訪問該域名(包括子域名),防止 SSL 剝離攻擊。

注意:確保 HTTPS 完全配置好再開啟,否則會(huì)導(dǎo)致網(wǎng)站無法通過 HTTP 訪問。

三、安全響應(yīng)頭(Security Headers)

7. 完整的 Security Headers 配置

# 防止點(diǎn)擊劫持
add_header X-Frame-Options "SAMEORIGIN" always;

# 防止 MIME 類型嗅探(如把 .jpg 當(dāng)腳本執(zhí)行)
add_header X-Content-Type-Options "nosniff" always;

# 啟用 XSS 過濾器(現(xiàn)代瀏覽器已廢棄,但仍建議保留兼容)
add_header X-XSS-Protection "1; mode=block" always;

# 控制 Referer 信息泄露
add_header Referrer-Policy "no-referrer-when-downgrade" always;

# 內(nèi)容安全策略(CSP),限制資源加載來源
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'; frame-ancestors 'self';" always;

# 限制瀏覽器功能權(quán)限
add_header Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=()" always;
響應(yīng)頭解決的問題
X-Frame-Options點(diǎn)擊劫持(Clickjacking)
X-Content-Type-OptionsMIME 嗅探攻擊
X-XSS-Protection反射型 XSS(瀏覽器層面)
Referrer-PolicyReferer 信息泄露(如從含 token 的 URL 跳轉(zhuǎn))
Content-Security-PolicyXSS、數(shù)據(jù)注入、惡意資源加載
Permissions-Policy限制不必要的瀏覽器 API 權(quán)限

8. CSP frame-ancestors 替代 X-Frame-Options

# 更靈活的方案:允許指定域名嵌入
add_header Content-Security-Policy "frame-ancestors 'self' https://partner.example.com;" always;

解決的問題X-Frame-Options 只能設(shè) DENYSAMEORIGIN,無法指定具體域名。frame-ancestors 可以精確控制哪些網(wǎng)站可以嵌入你的頁面。

四、防盜鏈與訪問控制

9. 圖片/資源防盜鏈

location ~* \.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    # 允許空 Referer 和本域名
    valid_referers none blocked server_names *.example.com;
    
    if ($invalid_referer) {
        # 返回 403 或重定向到警告圖
        return 403;
        # 或:rewrite ^/ https://example.com/forbidden.png break;
    }
}

解決的問題:防止其他網(wǎng)站直接引用你的圖片/視頻資源,消耗你的帶寬和流量。

10. IP 黑名單/白名單

# 黑名單:拒絕特定 IP
location /admin {
    deny 192.168.1.100;
    deny 10.0.0.0/24;
    allow all;
}

# 白名單:只允許特定 IP 訪問
location /api/internal {
    allow 192.168.1.0/24;
    allow 10.0.0.5;
    deny all;
}

11. 目錄遍歷防護(hù)

location ~ /\. {
    # 拒絕訪問隱藏文件(.git, .env, .htaccess 等)
    deny all;
    access_log off;
    log_not_found off;
}

location ~* \.(git|svn|htaccess|env)$ {
    deny all;
}

解決的問題:防止攻擊者訪問 .git 目錄、.env 文件等敏感文件泄露源代碼或密鑰。

五、限流與防攻擊

12. 請求速率限制(Rate Limiting)

http {
    # 定義限流區(qū)域:按 IP 限制,10MB 內(nèi)存存儲(chǔ)狀態(tài),每秒 10 個(gè)請求
    limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
    
    # 針對登錄接口更嚴(yán)格
    limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
    
    # 按 IP 限制并發(fā)連接數(shù)
    limit_conn_zone $binary_remote_addr zone=addr:10m;
}

server {
    location / {
        # 突發(fā) 20 個(gè)請求,不延遲處理(超出直接 503)
        limit_req zone=general burst=20 nodelay;
        
        # 限制單個(gè) IP 最多 10 個(gè)并發(fā)連接
        limit_conn addr 10;
    }
    
    location /api/login {
        # 登錄接口更嚴(yán)格:每秒 1 次
        limit_req zone=login burst=5 nodelay;
    }
}
配置解決的問題
limit_req防止接口被暴 力刷、爬蟲過度抓取
limit_conn防止單個(gè) IP 占用過多連接資源
burst允許短時(shí)間突發(fā)請求,平滑處理
nodelay不排隊(duì),超出直接拒絕(降低延遲)

13. 防 Slowloris / Slow POST 攻擊

http {
    # 讀取客戶端請求頭的超時(shí)時(shí)間
    client_header_timeout 10s;
    
    # 讀取客戶端請求體的超時(shí)時(shí)間
    client_body_timeout 10s;
    
    # 發(fā)送響應(yīng)的超時(shí)時(shí)間
    send_timeout 10s;
}

解決的問題:Slowloris 攻擊通過緩慢發(fā)送請求頭/體占用連接,導(dǎo)致正常用戶無法連接。

六、性能優(yōu)化配置

14. Gzip / Brotli 壓縮

http {
    # Gzip 壓縮
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_min_length 256;
    gzip_types
        text/plain
        text/css
        text/javascript
        application/javascript
        application/json
        application/xml
        image/svg+xml;
    
    # Brotli 壓縮(需要編譯 ngx_brotli 模塊,壓縮率比 gzip 高 15-25%)
    # brotli on;
    # brotli_comp_level 5;
    # brotli_types text/plain text/css application/javascript application/json;
}

解決的問題:減少傳輸體積,提升頁面加載速度。文本類資源通??蓧嚎s 60-80%。

15. 靜態(tài)資源緩存

location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|otf)$ {
    # 強(qiáng)緩存:30 天
    expires 30d;
    add_header Cache-Control "public, immutable";
    
    # 禁用日志減少 I/O
    access_log off;
}

location ~* \.(html|htm)$ {
    # HTML 不緩存或短時(shí)間緩存
    expires -1;
    add_header Cache-Control "no-store, no-cache, must-revalidate";
}
配置解決的問題
expires 30d強(qiáng)緩存,瀏覽器 30 天內(nèi)不再請求
immutable聲明資源永不改變,連條件請求(304)都跳過
access_log off靜態(tài)資源訪問不記錄日志,減少磁盤 I/O

16. 高效文件傳輸

http {
    # 內(nèi)核態(tài)直接傳輸文件,零拷貝
    sendfile on;
    
    # 累積到一定大小再發(fā)送(配合 sendfile)
    tcp_nopush on;
    
    # 立即發(fā)送小數(shù)據(jù)包(降低延遲)
    tcp_nodelay on;
}

解決的問題

  • sendfile:避免數(shù)據(jù)在用戶態(tài)和內(nèi)核態(tài)之間拷貝,大幅提升靜態(tài)文件傳輸性能
  • tcp_nopush + tcp_nodelay:平衡吞吐量和延遲

17. 長連接優(yōu)化

http {
    # 長連接保持時(shí)間
    keepalive_timeout 30s;
    
    # 單個(gè)長連接最大請求數(shù)
    keepalive_requests 1000;
    
    # 與后端服務(wù)保持長連接(反向代理場景)
    upstream backend {
        server 127.0.0.1:8080;
        keepalive 32;  # 保持 32 個(gè)空閑連接
    }
}

解決的問題:減少 TCP 握手開銷,提升高并發(fā)下的性能。

七、反向代理配置

18. 完整的反向代理配置

upstream backend {
    server 127.0.0.1:3000 weight=5;
    server 127.0.0.1:3001 weight=5;
    server 127.0.0.1:3002 backup;  # 備用節(jié)點(diǎn)
    keepalive 32;
}

server {
    listen 80;
    server_name api.example.com;
    
    location / {
        proxy_pass http://backend;
        
        # 傳遞真實(shí)客戶端 IP
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # 代理相關(guān)優(yōu)化
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        
        # 超時(shí)配置
        proxy_connect_timeout 5s;
        proxy_send_timeout 10s;
        proxy_read_timeout 10s;
        
        # 緩沖區(qū)
        proxy_buffering on;
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;
    }
}
配置解決的問題
X-Forwarded-For后端服務(wù)獲取真實(shí)客戶端 IP(而非 Nginx IP)
X-Forwarded-Proto后端服務(wù)知道原始請求是 HTTP 還是 HTTPS
proxy_buffering緩沖后端響應(yīng),優(yōu)化傳輸效率
keepalive與后端保持長連接,減少 TCP 建立開銷

八、日志配置

19. 結(jié)構(gòu)化日志與性能監(jiān)控

http {
    # 自定義日志格式(含性能指標(biāo))
    log_format performance '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $body_bytes_sent '
                           'rt=$request_time '
                           'uct="$upstream_connect_time" '
                           'uht="$upstream_header_time" '
                           'urt="$upstream_response_time"';
    
    # JSON 格式(便于 ELK / Grafana 解析)
    log_format json_combined escape=json '{'
        '"time":"$time_iso8601",'
        '"remote_addr":"$remote_addr",'
        '"request":"$request",'
        '"status":$status,'
        '"request_time":$request_time,'
        '"upstream_response_time":"$upstream_response_time",'
        '"body_bytes_sent":$body_bytes_sent,'
        '"http_referer":"$http_referer",'
        '"http_user_agent":"$http_user_agent"'
    '}';
    
    # 主日志
    access_log /var/log/nginx/access.log performance buffer=32k flush=5s;
    
    # API 專用 JSON 日志
    access_log /var/log/nginx/api.log json_combined;
}

解決的問題:便于排查慢請求、監(jiān)控后端服務(wù)健康狀態(tài)、對接日志分析系統(tǒng)。

九、完整配置模板

# /etc/nginx/nginx.conf

user www-data;
worker_processes auto;
worker_rlimit_nofile 65535;
pid /run/nginx.pid;

events {
    worker_connections 4096;
    use epoll;
    multi_accept on;
}

http {
    # 基礎(chǔ)設(shè)置
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 30;
    keepalive_requests 1000;
    types_hash_max_size 2048;
    server_tokens off;
    
    # 緩沖區(qū)
    client_body_buffer_size 128k;
    client_max_body_size 10m;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 4k;
    
    # 超時(shí)
    client_header_timeout 10s;
    client_body_timeout 10s;
    send_timeout 10s;
    
    # 壓縮
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_min_length 256;
    gzip_types text/plain text/css text/javascript application/javascript application/json application/xml image/svg+xml;
    
    # MIME 類型
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    
    # 日志
    log_format performance '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $body_bytes_sent '
                           'rt=$request_time uct="$upstream_connect_time" '
                           'uht="$upstream_header_time" urt="$upstream_response_time"';
    access_log /var/log/nginx/access.log performance buffer=32k flush=5s;
    error_log /var/log/nginx/error.log warn;
    
    # 限流
    limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    
    # 安全響應(yīng)頭
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
    
    # 引入站點(diǎn)配置
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

總結(jié)速查表

類別配置解決的核心問題
信息隱藏server_tokens off版本信息泄露
傳輸安全ssl_protocols TLSv1.2 TLSv1.3中間人攻擊、協(xié)議降級
劫持防護(hù)X-Frame-Options / frame-ancestors點(diǎn)擊劫持
注入防護(hù)X-Content-Type-Options / CSPXSS、MIME 嗅探
資源盜用valid_referers帶寬被盜
暴 力破解limit_req / limit_conn接口被刷、DDoS
連接耗盡各種 timeoutSlowloris 攻擊
傳輸優(yōu)化gzip / sendfile / keepalive加載慢、高延遲
緩存策略expires / Cache-Control重復(fù)請求、帶寬浪費(fèi)

建議:配置修改后務(wù)必執(zhí)行 nginx -t 檢查語法,再用 nginx -s reload 平滑重載,避免服務(wù)中斷。

到此這篇關(guān)于從安全加固到性能調(diào)優(yōu)詳解Nginx中生產(chǎn)環(huán)境配置的完全指南的文章就介紹到這了,更多相關(guān)Nginx生產(chǎn)環(huán)境配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx Proxy 代理測試的實(shí)現(xiàn)

    Nginx Proxy 代理測試的實(shí)現(xiàn)

    本文主要介紹了Nginx Proxy 代理測試的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • 采用ngxtop實(shí)現(xiàn)nginx實(shí)時(shí)訪問數(shù)據(jù)統(tǒng)計(jì)

    采用ngxtop實(shí)現(xiàn)nginx實(shí)時(shí)訪問數(shù)據(jù)統(tǒng)計(jì)

    這篇文章主要介紹了采用ngxtop實(shí)現(xiàn)nginx實(shí)時(shí)訪問數(shù)據(jù)統(tǒng)計(jì),需要的朋友可以參考下
    2014-07-07
  • Nginx?Proxy?Manager的具體實(shí)現(xiàn)

    Nginx?Proxy?Manager的具體實(shí)現(xiàn)

    Nginx?Proxy?Manager?就是一個(gè)?Nginx?的代理管理器,本文主要介紹了Nginx?Proxy?Manager的具體實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • Nginx配置前端http緩存的實(shí)現(xiàn)

    Nginx配置前端http緩存的實(shí)現(xiàn)

    本文介紹了使用Nginx配置前端HTTP緩存,通過合理配置緩存策略,可以有效地提升前端資源的加載速度,減少服務(wù)器負(fù)載,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • Nginx出現(xiàn)504 Gateway Time-out的解決方法

    Nginx出現(xiàn)504 Gateway Time-out的解決方法

    nginx訪問出現(xiàn)504 Gateway Time-out,一般是由于程序執(zhí)行時(shí)間過長導(dǎo)致響應(yīng)超時(shí),本文就來介紹一下解決方法,感興趣的可以了解一下
    2023-10-10
  • 一段萬能的nginx接口實(shí)現(xiàn)反向代理配置

    一段萬能的nginx接口實(shí)現(xiàn)反向代理配置

    這篇文章主要介紹了一段萬能的nginx接口實(shí)現(xiàn)反向代理配置,詳細(xì)的介紹了什么是反向代理及其接口反向代理的實(shí)現(xiàn),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-10-10
  • 關(guān)于nginx 實(shí)現(xiàn)jira反向代理的問題

    關(guān)于nginx 實(shí)現(xiàn)jira反向代理的問題

    這篇文章主要介紹了關(guān)于nginx 實(shí)現(xiàn)jira反向代理的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • nginx快速部署一個(gè)網(wǎng)站服務(wù)(多域名+多端口)

    nginx快速部署一個(gè)網(wǎng)站服務(wù)(多域名+多端口)

    本文主要介紹了nginx快速部署一個(gè)網(wǎng)站服務(wù),并實(shí)現(xiàn)多域名和多端口,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-10-10
  • nginx 某些url只能由特定網(wǎng)段訪問

    nginx 某些url只能由特定網(wǎng)段訪問

    在一些場景中,我們需要根據(jù)客戶端的IP地址或網(wǎng)段對訪問進(jìn)行控制,在Nginx中針對某些URL只允許特定網(wǎng)段訪問,本文就來介紹一下如何實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • nginx實(shí)現(xiàn)多個(gè)域名和集群的方法步驟

    nginx實(shí)現(xiàn)多個(gè)域名和集群的方法步驟

    本文主要介紹了nginx實(shí)現(xiàn)多個(gè)域名和集群的方法步驟,需要配置Nginx作為反向代理服務(wù)器,將來自不同域名的請求轉(zhuǎn)發(fā)到集群中的相應(yīng)后端服務(wù)器,感興趣的可以了解一下
    2024-04-04

最新評論

青州市| 长岭县| 康保县| 墨脱县| 达拉特旗| 怀化市| 托克托县| 西畴县| 丹阳市| 纳雍县| 泾源县| 克拉玛依市| 全椒县| 太和县| 图们市| 方山县| 杭州市| 漯河市| 北票市| 三江| SHOW| 西畴县| 云龙县| 靖西县| 四川省| 十堰市| 调兵山市| 错那县| 梁河县| 龙口市| 西乌| 彝良县| 正阳县| 阿拉善左旗| 柏乡县| 库车县| 洞头县| 渑池县| 綦江县| 甘肃省| 三河市|