今天,我們將深入探討 Nginx 的 6 個關鍵進階配置,這些細節(jié)在實際生產(chǎn)環(huán)境中至關重要,能顯著提升性能、安全性和靈活性。 主要配置項如下:
root
與 alias
指令的本質區(qū)別
反向代理 proxy_pass 高級配置剖析
try_files 的靈活應用場景
性能優(yōu)化gzip壓縮和表態(tài)資源緩存
Cookie 安全與行為控制
安全加固方案
下面分別介紹每一項的配置及注意事項:
一、Nginx 中 root 與 alias 指令的區(qū)別
location /images/ {
root /data/website;
}
對于請求 /images/logo.png
,Nginx 會查找 /data/website/images/logo.png
location /images/ {
alias /data/website/;
}
對于請求 /images/logo.png
,Nginx 會查找 /data/website/logo.png
注意: alias 的路徑后面必須加上 ‘/’ root后面可不加 ‘/’
三、理解Nginx 中 try_files 指令
location / {
try_files $uri $uri/ /index.html;
}
$uri
- 嘗試直接匹配請求的URI對應的文件
$uri/
- 嘗試將URI作為目錄查找
/index.html
- 如果前兩者都不存在,則返回index.html
只有一個實際的HTML文件(index.html)
前端路由在客戶端處理
直接訪問路由路徑時服務器上沒有對應文件
舉個例子假如沒有這個配置,當用戶刷新非根路由(如/dashboard
)時,Nginx會返回404,因為服務器上不存在/dashboard
這個文件。注意:如果前端使用的是哈希路由,可能不需要此配置,因為哈希后的內(nèi)容不會發(fā)送到服務器。
1. 啟用Gzip壓縮
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
Gzip 壓縮的好處
減少帶寬占用,特別是對移動用戶更有利
提升首次內(nèi)容渲染時間(FCP)
2. 靜態(tài)資源緩存
location ~* \.(?:css|js|jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 1y;
access_log off;
add_header Cache-Control "public";
}
緩存的好處
當 Nginx 作為反向代理時,默認會傳遞客戶端的 Cookie 到后端服務器server {
location / {
proxy_pass http://backend;
proxy_set_header Cookie $http_cookie;
proxy_pass_header Set-Cookie;
proxy_cookie_domain ~^(.+)$ $host;
proxy_cookie_path / /;
proxy_cookie_flags ~ secure HttpOnly;
header_filter_by_lua_block {
if ngx.header["Set-Cookie"] then
ngx.header["Set-Cookie"] = {
ngx.header["Set-Cookie"] .. "; SameSite=Lax"
}
end
}
}
}
if ($request_method !~ ^(GET|POST|HEAD)$) {
return 405;
}
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
location / {
limit_req zone=req_limit burst=20;
}
limit_req_zone
定義限流規(guī)則
$binary_remote_addr
:以客戶端的IP地址作為限流鍵(比$remote_addr
更節(jié)省內(nèi)存)。
zone=req_limit:10m
:創(chuàng)建名為 req_limit
的共享內(nèi)存區(qū),分配10MB空間(約可存儲16萬個IP狀態(tài))。
rate=10r/s
:限制每個IP的平均請求速率為每秒10個請求。
limit_req
應用限流規(guī)則
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
閱讀原文:原文鏈接
該文章在 2025/7/7 11:41:36 編輯過