自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官想聽(tīng)的 Nginx:直接上生產(chǎn)級(jí)配置!

開(kāi)發(fā) 前端
Nginx 具有強(qiáng)大的緩存功能,可以通過(guò)緩存機(jī)制大幅度減少后端服務(wù)器的負(fù)載,降低響應(yīng)時(shí)間。HTTP 緩存,?可以通過(guò)配置?proxy_cache?來(lái)緩存響應(yīng),避免每次請(qǐng)求都轉(zhuǎn)發(fā)到后端服務(wù)。

引言

哈哈,又到了我們熟悉的環(huán)節(jié),我們今天就分享下關(guān)于優(yōu)化 Nginx 的相關(guān)問(wèn)題,清理下大腦,我們直接開(kāi)始。

還有,我們最后有面試群,有興趣可以加入。

開(kāi)始

1. 如何優(yōu)化 Nginx 的并發(fā)處理能力?

Nginx 在高并發(fā)環(huán)境下表現(xiàn)優(yōu)異,主要得益于它的 事件驅(qū)動(dòng)架構(gòu)。為了進(jìn)一步優(yōu)化并發(fā)處理能力,可以調(diào)整以下配置:

? worker_processes: 設(shè)置 worker_processes 為與系統(tǒng) CPU 核心數(shù)相同的數(shù)量,以充分利用多核 CPU。worker_processes 4; # 根據(jù)服務(wù)器的 CPU 核心數(shù)進(jìn)行調(diào)整

? worker_connections: 每個(gè) worker 進(jìn)程可以處理的最大連接數(shù),增加此值可以提升并發(fā)能力。worker_connections 1024; # 每個(gè)工作進(jìn)程最多處理 1024 個(gè)連接

? events: 啟用 epoll(Linux)或 kqueue(Mac)等高效的事件驅(qū)動(dòng)模型,以提升 I/O 處理效率。

events {
    use epoll;  # 適用于 Linux 系統(tǒng)
    worker_connections 1024;
}

這些設(shè)置可以幫助 Nginx 更高效地處理并發(fā)連接,提升系統(tǒng)的整體吞吐量。

2. 如何通過(guò)緩存優(yōu)化 Nginx 性能?

Nginx 具有強(qiáng)大的緩存功能,可以通過(guò)緩存機(jī)制大幅度減少后端服務(wù)器的負(fù)載,降低響應(yīng)時(shí)間。

? HTTP 緩存: 可以通過(guò)配置 proxy_cache 來(lái)緩存響應(yīng),避免每次請(qǐng)求都轉(zhuǎn)發(fā)到后端服務(wù)。

? 配置示例:

http {
    proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
    server {
        listen 80;
        location / {
            proxy_cache my_cache;
            proxy_pass http://backend;
            proxy_cache_valid 200 1h;  # 對(duì)于 200 狀態(tài)碼的響應(yīng),緩存 1 小時(shí)
            proxy_cache_use_stale error timeout updating;  # 錯(cuò)誤或超時(shí)情況下使用陳舊緩存
        }
    }
}

? 靜態(tài)文件緩存: 靜態(tài)資源(如圖片、CSS、JavaScript 等)適合緩存,可以通過(guò)設(shè)置緩存頭來(lái)減少帶寬消耗。

? 配置示例:

server {
    location /images/ {
        expires 30d;  # 設(shè)置緩存過(guò)期時(shí)間為 30 天
        add_header Cache-Control "public";
    }
}

緩存不僅能提升 Nginx 的性能,還能降低后端服務(wù)的壓力,尤其適用于靜態(tài)內(nèi)容。

3. 如何優(yōu)化 Nginx 的響應(yīng)時(shí)間和帶寬利用率?

? 開(kāi)啟 Gzip 壓縮: Nginx 支持 Gzip 壓縮,能夠顯著減小傳輸內(nèi)容的大小,提高帶寬利用率,并減少響應(yīng)時(shí)間。

? 配置示例:

http {
    gzip on;
    gzip_min_length 1024;  # 啟用 Gzip 壓縮,且只對(duì)大于 1KB 的內(nèi)容生效
    gzip_types text/plain text/css application/javascript application/json;
}

? TCP_NOPUSH 和 TCP_NODELAY: 在高延遲環(huán)境下,可以通過(guò)啟用 TCP 優(yōu)化選項(xiàng)來(lái)提高性能,減少等待數(shù)據(jù)包的時(shí)間。

? 配置示例:

server {
    listen 80;
    tcp_nopush on;  # 優(yōu)化網(wǎng)絡(luò)傳輸
    tcp_nodelay on;  # 降低延遲
}

? 優(yōu)化傳輸協(xié)議: 啟用 HTTP/2 協(xié)議,它具有多路復(fù)用、頭部壓縮和請(qǐng)求優(yōu)先級(jí)等特性,能顯著提升網(wǎng)頁(yè)加載速度。

? 配置示例:

server {
    listen 443 ssl http2;
    server_name example.com;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/certificate.key;
}

4. 如何減少 Nginx 配置中的瓶頸?

Nginx 配置的瓶頸通常出現(xiàn)在以下幾個(gè)方面:

? Nginx 配置文件結(jié)構(gòu): 確保配置文件的結(jié)構(gòu)清晰,避免過(guò)多的 location 和 server 塊,從而減少 Nginx 解析配置的復(fù)雜度。

? 避免過(guò)多的正則表達(dá)式: 正則匹配會(huì)消耗較多的 CPU 資源,盡量避免在 location 塊中使用復(fù)雜的正則表達(dá)式,或者將其替換為路徑匹配。

? 合并 server 和 location 配置: 盡量避免重復(fù)配置相同的內(nèi)容,合理利用 include 來(lái)復(fù)用通用配置,減少冗余。

? 減小負(fù)載均衡策略的復(fù)雜性: 負(fù)載均衡時(shí),如果有多個(gè)后端服務(wù)器,盡量簡(jiǎn)化負(fù)載均衡算法,使用簡(jiǎn)單的輪詢(xún)算法,避免復(fù)雜的健康檢查和權(quán)重設(shè)置。

5. 如何配置 Nginx 的日志以減少 I/O 開(kāi)銷(xiāo)?

Nginx 的日志功能在生產(chǎn)環(huán)境中非常重要,但過(guò)多的日志寫(xiě)入會(huì)導(dǎo)致 I/O 開(kāi)銷(xiāo),影響性能。

? 禁用訪問(wèn)日志: 在高流量情況下,如果不需要訪問(wèn)日志,可以通過(guò)設(shè)置 access_log off; 來(lái)禁用訪問(wèn)日志。

? 配置示例:

server {
    listen 80;
    access_log off;
    location / {
        proxy_pass http://backend;
    }
}

? 日志緩沖: 使用 log_format 指令定義自定義日志格式,并且利用 access_log 的緩沖機(jī)制來(lái)減少磁盤(pán) I/O??梢栽O(shè)置 buffer 和 flush 參數(shù)來(lái)控制日志的刷新頻率。

? 配置示例:

http {
    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 buffer=32k flush=5m;
}

? 這里設(shè)置了日志緩沖為 32KB,并且每 5 分鐘刷新一次日志。

6. 如何優(yōu)化 Nginx 配置以防止 DDoS 攻擊?

通過(guò)以下配置,Nginx 可以有效地防止惡意流量和 DDoS 攻擊:

? 限制請(qǐng)求速率: 使用 limit_req 模塊限制每個(gè) IP 地址的請(qǐng)求速率。

? 配置示例:

http {
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
    server {
        listen 80;
        location / {
            limit_req zone=req_limit burst=20 nodelay;
            proxy_pass http://backend;
        }
    }
}

? 限制每個(gè)客戶(hù)端的最大連接數(shù): 通過(guò) limit_conn 模塊限制每個(gè)客戶(hù)端的最大并發(fā)連接數(shù)。

? 配置示例:

http {
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    server {
        listen 80;
        location / {
            limit_conn conn_limit 1;  # 每個(gè)客戶(hù)端最多 1 個(gè)并發(fā)連接
            proxy_pass http://backend;
        }
    }
}

? 增加連接超時(shí): 設(shè)置適當(dāng)?shù)倪B接超時(shí)和讀取超時(shí),防止長(zhǎng)時(shí)間未處理的連接占用過(guò)多資源。

? 配置示例:

http {
    client_body_timeout 10s;
    client_header_timeout 10s;
    send_timeout 10s;
}

7. 如何優(yōu)化 Nginx 的 SSL/TLS 性能?

Nginx 在處理 HTTPS 時(shí)需要高效地配置 SSL/TLS,以減少加密解密的性能開(kāi)銷(xiāo):

? 啟用 SSL/TLS 會(huì)話(huà)緩存: 通過(guò)緩存 SSL/TLS 會(huì)話(huà)來(lái)減少握手時(shí)間。

? 配置示例:

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1h;

? 使用現(xiàn)代加密算法: 配置安全的加密套件,并禁用過(guò)時(shí)的協(xié)議。

? 配置示例:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'HIGH:!aNULL:!MD5';

? 啟用 OCSP Stapling: 通過(guò)啟用 OCSP Stapling 來(lái)提高 SSL/TLS 握手的速度。

? 配置示例:

ssl_stapling on;
ssl_stapling_verify on;

8. 如何排查 Nginx 性能瓶頸?

? 監(jiān)控 Nginx 狀態(tài): 通過(guò)啟用 Nginx 狀態(tài)頁(yè)面,實(shí)時(shí)監(jiān)控 Nginx 的性能。

? 配置示例:

server {
    listen 8080;
    location /status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
}

? 日志分析: 檢查錯(cuò)誤日志、訪問(wèn)日志,尤其關(guān)注高延遲或 5xx 錯(cuò)誤,找出可能的性能瓶頸。

? 系統(tǒng)資源監(jiān)控: 通過(guò)監(jiān)控 CPU、內(nèi)存、網(wǎng)絡(luò)帶寬和磁盤(pán) I/O 等系統(tǒng)資源,定位 Nginx 服務(wù)器的瓶頸所在。

9. Nginx如何實(shí)現(xiàn)高并發(fā)?描述master-worker架構(gòu)與epoll事件模型的協(xié)同工作原理

? Master進(jìn)程: 負(fù)責(zé)讀取配置、綁定端口、管理Worker進(jìn)程(平滑重啟、熱加載)。

? Worker進(jìn)程: 實(shí)際處理請(qǐng)求,采用非阻塞+epoll多路復(fù)用機(jī)制。

? Epoll模型: 基于事件驅(qū)動(dòng),僅遍歷活躍連接,復(fù)雜度O(1),支持百萬(wàn)級(jí)并發(fā)。

? 配置優(yōu)化項(xiàng):

worker_processes auto;  # 匹配CPU核心數(shù)
worker_connections 10240; # 單個(gè)Worker最大連接數(shù)
use epoll;  # 明確指定事件模型

10. 以下配置存在什么問(wèn)題?如何優(yōu)化?

location /api/ {
    proxy_pass http://backend;
    proxy_set_header Host $host;
}

解析與優(yōu)化

? 問(wèn)題: 未傳遞客戶(hù)端真實(shí)IP,丟失關(guān)鍵信息。

? 修復(fù)方案:

proxy_set_header X-Real-IP 
$remote_addr;
proxy_set_header X-Forwarded-For $
proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_http_version 1.1;  # 啟用長(zhǎng)連接
proxy_set_header Connection "";

11. 如何通過(guò)Slab分配器優(yōu)化Nginx內(nèi)存碎片?給出數(shù)學(xué)公式與配置策略

? 內(nèi)存分配公式:

總內(nèi)存需求 = worker_processes × (worker_connections × 請(qǐng)求緩沖區(qū) + 響應(yīng)緩沖區(qū))

? 優(yōu)化配置:

分級(jí)內(nèi)存池管理
slab_size1m;  
slab_page_size4k;

限制單個(gè)請(qǐng)求內(nèi)存
client_body_buffer_size16k;
client_header_buffer_size4k;
large_client_header_buffers832k;

連接級(jí)內(nèi)存限制
connection_pool_size4096;
request_pool_size4k;

? 監(jiān)控指標(biāo):

查看內(nèi)存碎片率
nginx -V 2>&1 | grep -o 'with-debug' && kill -USR1 $(cat /run/nginx.pid)
tail -f /var/log/nginx/error.log | grep slab

12. 如何設(shè)計(jì)Nginx緩存策略防止高并發(fā)下的緩存穿透?

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:1024m inactive=7d use_temp_path=off;

location / {
    proxy_cache mycache;
    proxy_cache_lockon;  # 防擊穿:同一請(qǐng)求僅一個(gè)回源
    proxy_cache_key"$scheme$request_method$host$request_uri";
    proxy_cache_valid20030210m;
    proxy_cache_use_staleerror timeout updating;
    proxy_cache_background_updateon; # 后臺(tái)更新緩存
}

13. 如何利用Nginx+Lua實(shí)現(xiàn)動(dòng)態(tài)限頻?給出完整代碼邏輯

lua_shared_dict limit_counter 10m;
server {
    location / {
        access_by_lua_block {
            local limit_counter = ngx.shared.limit_counter
            local key = ngx.var.binary_remote_addr
            local req,_ = limit_counter:get(key)

            if req then
                if req > 100 then  # 每秒100次閾值
                    ngx.exit(503)
                else
                    limit_counter:incr(key,1)
                end
            else
                limit_counter:set(key,1,1)  # 過(guò)期時(shí)間1秒
            end
        }
    }
}

14. 如何通過(guò) Nginx 攔截 SQL 注入和 XSS 攻擊?給出正則表達(dá)式和配置片段

set $block0;
if ($request_method !~ ^(GET|POST)$ ) { set$block1; }

if ($query_string~* "union.*select.*from") { set$block1; } # SQL注入檢測(cè)
if ($args~* "<script.*>") { set$block1; } # XSS檢測(cè)

location / {
    if ($block = 1) {
        return444;  # 靜默丟棄攻擊請(qǐng)求
    }
    # 其他業(yè)務(wù)邏輯
}

15. 如何構(gòu)建Nginx全維度監(jiān)控指標(biāo)?給出Prometheus+Grafana方案

? nginx.conf 開(kāi)啟 Stub Status

location /nginx_status {
    stub_status;
    allow 127.0.0.1;
    deny all;
}

? Prometheus 配置

job_name: 'nginx'
static_configs:

? Grafana看板: 包含QPS、連接數(shù)、4xx/5xx錯(cuò)誤率、Upstream響應(yīng)時(shí)間分布

16. 如何實(shí)現(xiàn)Nginx的零停機(jī)熱升級(jí)?請(qǐng)描述完整操作流程及回滾方案

1) 備份舊版本二進(jìn)制文件

cp /usr/sbin/nginx /usr/sbin/nginx.old

2) 編譯新版本(需保留原 configure 參數(shù))

./configure --with-http_v2_module --with-stream=dynamic...
make && make install

3) 向主進(jìn)程發(fā)送 USR2 信號(hào)啟動(dòng)新進(jìn)程

kill -USR2 $(cat /run/nginx.pid)

4) 逐步關(guān)閉舊 Worker 進(jìn)程

kill -WINCH $(cat /run/nginx.pid.oldbin)

5) 強(qiáng)制回滾(若新版本異常)

mv /usr/sbin/nginx.old /usr/sbin/nginx
kill -HUP $(cat /run/nginx.pid.oldbin)

17. 如何基于Nginx+GeoIP實(shí)現(xiàn)跨國(guó)流量調(diào)度?給出DNS與Nginx聯(lián)動(dòng)方案

GeoIP數(shù)據(jù)庫(kù)配置:

geoip_country /usr/share/GeoIP/GeoIP.dat;
map$geoip_country_code$backend {
    default  us.web.service;  # 默認(rèn)美國(guó)集群
    CN       cn.web.service;  # 中國(guó)用戶(hù)
    JP       jp.web.service;  # 日本用戶(hù)
}

server {
    location / {
        resolver8.8.8.8 valid=30s;  # 動(dòng)態(tài)DNS解析
        proxy_pass http://$backend;
        proxy_next_upstreamerror timeout http_500;
    }
}

18. 在Kubernetes+Serverless架構(gòu)中,Nginx Ingress如何實(shí)現(xiàn)自動(dòng)彈性伸縮?

? 水平擴(kuò)展:基于 HPA 監(jiān)控 CPU/內(nèi)存 自動(dòng)擴(kuò)縮 Pod 數(shù)量

? 智能路由:通過(guò) Nginx Ingress Annotation 實(shí)現(xiàn)金絲雀發(fā)布

nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"

? 冷啟動(dòng)優(yōu)化:預(yù)加載 Nginx 配置到內(nèi)存池,減少首次請(qǐng)求延遲

19. 如何將 HTTP/1.1 升級(jí)為 HTTP/2 并優(yōu)化性能?給出關(guān)鍵配置項(xiàng)

http {
    # 開(kāi)啟HTTP/2
    listen443 ssl http2;  

    # 優(yōu)化連接復(fù)用
    keepalive_timeout300s;
    keepalive_requests10000;

    # 頭部壓縮優(yōu)化
    gzipon;
    gzip_min_length1k;
    gzip_comp_level3;
    gzip_types text/plain application/json;

    # 調(diào)整緩沖區(qū)應(yīng)對(duì)大 Header
    http2_max_field_size16k;
    http2_max_header_size64k;

    # 動(dòng)態(tài)調(diào)整窗口大小
    http2_body_preread_size128k;
    http2_streams_index_size1024;
}

性能指標(biāo):

? 連接復(fù)用率提升 40%+

? 首字節(jié)時(shí)間(TTFB)降低 30%

? 頭部傳輸體積減少 50%

20. 設(shè)計(jì)防御大規(guī)模 CC 攻擊的分布式限流方案,需支持動(dòng)態(tài)規(guī)則更新

? 分布式限流(Redis集群)

limit_req_zone $binary_remote_addr zone=global_limit:10m rate=100r/s;
limit_req zone=global_limit burst=200 delay=10;

? 動(dòng)態(tài)規(guī)則API

location /api/limit_rules {
    # 接受JSON格式規(guī)則更新
    proxy_pass http://rule_engine;

    # 實(shí)時(shí)加載新規(guī)則
    nginx -s reload && lua_shared_dict limit_rules 10m;
}

? Lua動(dòng)態(tài)過(guò)濾

access_by_lua_block {
    local rules = ngx.shared.limit_rules
    local ip = ngx.var.remote_addr
    if rules:get(ip) == "block" then
        ngx.exit(444)
    end
}

? 防御指標(biāo):

a.單IP QPS限制精度 ±5%

b.規(guī)則更新延遲 < 500ms

c.10Gbps攻擊流量過(guò)濾率 99.9%

21. 在Kubernetes中如何優(yōu)化Nginx Ingress Controller性能?

? 水平自動(dòng)擴(kuò)縮

autoscaling:
  enabled:true
minReplicas:3
maxReplicas:100
metrics:
    -type:Pods
      pods:
        metric:
          name:nginx_connections_active
        target:
          type:AverageValue
          averageValue: 1000

? 內(nèi)核參數(shù)調(diào)優(yōu)(DaemonSet)

sysctls:
name: net.core.somaxconn
value: "65535"
name: net.ipv4.tcp_tw_reuse
value: "1"

? 零拷貝優(yōu)化

env:
name: NGINX_ENABLE_TCP_NOPUSH
value: "true"

? 優(yōu)化效果:

a.Pod啟動(dòng)時(shí)間縮短至 2s

b.長(zhǎng)連接復(fù)用率提升至 95%

c.單Pod支撐并發(fā)連接數(shù)突破 50k

22. 如何通過(guò)火焰圖定位 Nginx CPU 熱點(diǎn)問(wèn)題?給出完整診斷流程

1)安裝 SystemTap 工具鏈

yum install systemtap kernel-devel-$(uname -r)

2)采集CPU樣本(持續(xù)30秒)

stap -v -DMAXSKIPPED=99999 -DSTP_NO_OVERLOAD \
  -DMAXTRYLOCK=1000 -DMAXMAPENTRIES=100000 \
  -d nginx --ldd -c 'global s; probe process("/usr/sbin/nginx").function("*") { s[probefunc()] <<< 1; }' \
  -o nginx_cpu.flame

3)生成火焰圖

git clone https://github.com/brendangregg/FlameGraph
./FlameGraph/stackcollapse-stap.pl nginx_cpu.flame | ./FlameGraph/flamegraph.pl > cpu.svg

4)典型問(wèn)題定位

? 正則表達(dá)式回溯(優(yōu)化rewrite規(guī)則)

? 阻塞式文件IO(啟用aio threads)

? 第三方模塊死鎖(檢查OpenSSL版本兼容性)

23. 你能描述下 Nginx 的匹配方式有哪些,并且它們之間的優(yōu)先級(jí)?

1)精確匹配(Exact Match)

? 語(yǔ)法:location = /uri { ... }

? 特點(diǎn):

a.僅匹配完全相同的URI(區(qū)分大小寫(xiě))。

b.優(yōu)先級(jí)最高,一旦匹配成功,立即停止搜索其他規(guī)則。

? 示例:

location = /login {
    # 僅匹配 /login
}

2)前綴匹配(Prefix Match)

分為兩種形式:

普通前綴匹配

? 語(yǔ)法:location /prefix { ... }

? 特點(diǎn):

a.匹配所有以 /prefix 開(kāi)頭的URI。

b.優(yōu)先級(jí)低于正則匹配和精確匹配。

優(yōu)先前綴匹配(Non-Regular Prefix Match)

? 語(yǔ)法:location ^~ /prefix { ... }

? 特點(diǎn):

a.匹配以 /prefix 開(kāi)頭的URI。

b.阻止后續(xù)正則匹配:一旦匹配成功,不再檢查其他正則規(guī)則。

? 示例:

location ^~ /static {
    # 匹配 /static、/static/css 等,且不再檢查其他正則規(guī)則
}

3) 正則匹配(Regular Expression Match)

分為兩種形式:

區(qū)分大小寫(xiě)的正則匹配

? 語(yǔ)法:location ~ \.php$ { ... }

? 特點(diǎn):

? 使用正則表達(dá)式匹配URI,區(qū)分大小寫(xiě)。

? 多個(gè)正則匹配按配置文件中的順序執(zhí)行,選擇第一個(gè)匹配的規(guī)則。

不區(qū)分大小寫(xiě)的正則匹配

? 語(yǔ)法:location ~* \.jpg$ { ... }

? 特點(diǎn):

a.使用正則表達(dá)式匹配URI,不區(qū)分大小寫(xiě)。

b.同樣按配置文件順序執(zhí)行,選擇第一個(gè)匹配的規(guī)則。

? 示例:

location ~ \.php$ {
    # 匹配以 .php 結(jié)尾的URI(區(qū)分大小寫(xiě),如 /index.php)
}

location ~* \.(jpg|png)$ {
    # 匹配以 .jpg、.JPG、.png、.PNG 結(jié)尾的URI
}

4)默認(rèn)匹配(Default Match)

? 語(yǔ)法:location / { ... }

? 特點(diǎn):

a.作為兜底規(guī)則,匹配所有未被其他規(guī)則匹配的URI。

b.優(yōu)先級(jí)最低,僅在無(wú)其他匹配時(shí)生效。

? 示例:

location / {
    # 匹配所有未匹配到其他規(guī)則的URI(如 /home、/about)
}

優(yōu)先級(jí)總結(jié)

匹配類(lèi)型

優(yōu)先級(jí)順序

說(shuō)明

location = /uri

最高

精確匹配

location ^~ /prefix

次高

前綴匹配(阻止后續(xù)正則匹配)

location ~ \.regex$

正則匹配(區(qū)分大小寫(xiě),按順序執(zhí)行)

location ~* \.regex$

正則匹配(不區(qū)分大小寫(xiě),按順序執(zhí)行)

location /prefix

普通前綴匹配

location /

最低

默認(rèn)匹配

示例配置:

server {
    # 精確匹配
    location = /login {
        proxy_pass http://backend/login;
    }

    # 優(yōu)先前綴匹配(阻止正則匹配)
    location ^~ /static {
        root /var/www/static;
    }

    # 正則匹配(區(qū)分大小寫(xiě))
    location~ \.php$ {
        fastcgi_pass php_backend;
    }

    # 正則匹配(不區(qū)分大小寫(xiě))
    location~* \.(jpg|png)$ {
        expires30d;
    }

    # 默認(rèn)匹配
    location / {
        proxy_pass http://backend;
    }
}

關(guān)鍵注意事項(xiàng)

1)正則匹配順序:多個(gè)正則規(guī)則按配置順序執(zhí)行,第一個(gè)匹配的規(guī)則生效。

2)性能優(yōu)化:

a.使用 ^~ 前綴匹配替代正則匹配可提升性能。

b.避免過(guò)于復(fù)雜的正則表達(dá)式(如嵌套回溯)。

3)沖突處理:

? 如果多個(gè)正則表達(dá)式匹配同一URI,選擇第一個(gè)定義的規(guī)則。

4)特殊場(chǎng)景:

? 使用 location @name 定義命名位置塊(僅內(nèi)部重定向使用)。

責(zé)任編輯:武曉燕 來(lái)源: 云原生運(yùn)維圈
相關(guān)推薦

2020-05-09 10:35:06

遞歸面試算法

2023-01-26 00:25:09

JVM設(shè)置技術(shù)

2015-08-13 10:29:12

面試面試官

2024-08-13 17:56:52

單例裝飾器模式

2023-11-30 08:16:19

SpringjarTomcat

2022-05-23 08:43:02

BigIntJavaScript內(nèi)置對(duì)象

2010-08-12 16:28:35

面試官

2023-02-16 08:10:40

死鎖線程

2021-10-28 19:06:56

Casbin配置設(shè)計(jì)

2025-03-06 08:01:46

KubernetesscratchPod

2020-09-07 06:28:37

Nginx靜態(tài)負(fù)載均衡動(dòng)態(tài)負(fù)載均衡

2018-10-22 14:28:26

面試官數(shù)據(jù)公司

2024-06-13 08:01:19

2021-11-08 09:18:01

CAS面試場(chǎng)景

2022-01-26 00:01:00

Casbin配置權(quán)限

2024-11-08 13:36:09

2024-11-19 15:13:02

2023-12-27 18:16:39

MVCC隔離級(jí)別幻讀

2025-03-10 11:40:00

前端開(kāi)發(fā)HTML

2025-03-10 00:00:00

property?attributeHTML
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)