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

Nginx從入門到精通:2026最新中文教程,覆蓋安裝、配置、反向代理與負(fù)載均衡

 更新時(shí)間:2026年04月11日 11:59:36   作者:程序員果子  
本文介紹了Nginx的核心價(jià)值、應(yīng)用場(chǎng)景、配置解析和實(shí)戰(zhàn)技能,涵蓋靜態(tài)資源服務(wù)、反向代理、負(fù)載均衡、動(dòng)靜分離和SSL/TLS終端代理等內(nèi)容,并提供了性能調(diào)優(yōu)和安全加固的方法,Nginx以其高性能、靈活性、穩(wěn)定性和豐富的功能被廣泛應(yīng)用于Web服務(wù)中

前言:為什么要學(xué) Nginx?

學(xué)習(xí)Nginx,就是掌握如何為你的Web服務(wù)構(gòu)建一個(gè)高效、可靠且強(qiáng)大的“交通中樞”

Nginx 的核心價(jià)值體現(xiàn)在三個(gè)關(guān)鍵方面:

  1. 高性能:采用事件驅(qū)動(dòng)的異步非阻塞架構(gòu),能夠輕松應(yīng)對(duì) C10K(甚至 C100K)問題

  2. 高可靠性:Master-Worker 進(jìn)程模型確保服務(wù)穩(wěn)定運(yùn)行

  3. 高擴(kuò)展性:模塊化設(shè)計(jì)支持豐富的功能擴(kuò)展

無(wú)論是作為 Web 服務(wù)器、反向代理、負(fù)載均衡器還是 API 網(wǎng)關(guān),Nginx 都展現(xiàn)出了卓越的性能表現(xiàn)。本文將帶你從零開始,全面掌握 Nginx 的核心概念和實(shí)戰(zhàn)技能。

一、Nginx 基礎(chǔ)入門:從零搭建第一個(gè)服務(wù)

1.1 初識(shí) Nginx:它是什么,能做什么?

Nginx 的主要應(yīng)用場(chǎng)景:

  • Web 服務(wù)器:處理靜態(tài)資源請(qǐng)求,性能遠(yuǎn)超傳統(tǒng)服務(wù)器

  • 反向代理服務(wù)器:隱藏后端服務(wù),提供統(tǒng)一的訪問入口

  • 負(fù)載均衡器:在多臺(tái)服務(wù)器間分配請(qǐng)求負(fù)載

  • API 網(wǎng)關(guān):處理 API 路由、認(rèn)證、限流等能力

  • 內(nèi)容緩存:緩存動(dòng)態(tài)和靜態(tài)內(nèi)容,提升響應(yīng)速度

1.2 第一個(gè) Nginx 服務(wù):最小化配置實(shí)戰(zhàn)

最小化配置文件示例

以源碼安裝的 Nginx 為例,配置文件路徑為 /usr/local/nginx/conf/nginx.conf,最小可用配置如下:

# -------------------------- main 區(qū)塊(全局配置)--------------------------
# 工作進(jìn)程數(shù):建議設(shè)為 CPU 核心數(shù),auto 表示自動(dòng)匹配
worker_processes auto;
# 全局錯(cuò)誤日志路徑與級(jí)別(debug/info/notice/warn/error/crit)
error_log /usr/local/nginx/logs/error.log warn;
# 進(jìn)程 PID 文件路徑
pid /usr/local/nginx/logs/nginx.pid;


# -------------------------- events 區(qū)塊(連接處理配置)--------------------------
events {
    # 每個(gè)工作進(jìn)程的最大連接數(shù)(默認(rèn) 1024,需結(jié)合系統(tǒng)文件描述符調(diào)整)
    worker_connections 1024;
    # 事件模型:Linux 推薦 epoll,BSD 推薦 kqueue
    use epoll;
    # 允許一個(gè)連接同時(shí)被多個(gè)請(qǐng)求復(fù)用(HTTP 長(zhǎng)連接相關(guān))
    multi_accept on;
}


# -------------------------- http 區(qū)塊(HTTP 協(xié)議總配置)--------------------------
http {
    # 引入 MIME 類型映射文件(定義文件后綴與 Content-Type 的對(duì)應(yīng)關(guān)系)
    include       /usr/local/nginx/conf/mime.types;
    # 未知文件類型的默認(rèn) Content-Type
    default_type  application/octet-stream;

    # 日志格式定義(main 為格式名稱,可自定義)
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    # 訪問日志路徑,使用 main 格式
    access_log  /usr/local/nginx/logs/access.log  main;

    # 啟用零拷貝(直接磁盤→網(wǎng)卡傳輸,跳過用戶態(tài)緩沖區(qū),提升性能)
    sendfile        on;
    # 與 sendfile 配合,合并數(shù)據(jù)包發(fā)送,減少 TCP 握手次數(shù)
    tcp_nopush      on;
    # 禁用 Nagle 算法,小數(shù)據(jù)包即時(shí)發(fā)送(平衡延遲與效率)
    tcp_nodelay     on;

    # 連接超時(shí)時(shí)間(客戶端與 Nginx 保持連接的超時(shí)時(shí)間)
    keepalive_timeout  65;


    # -------------------------- server 區(qū)塊(虛擬主機(jī))--------------------------
    # 定義一個(gè)虛擬主機(jī)(可理解為“單個(gè)網(wǎng)站”)
    server {
        # 監(jiān)聽端口(默認(rèn) 80,HTTP 標(biāo)準(zhǔn)端口)
        listen       80;
        # 綁定域名(多個(gè)域名用空格分隔,如 "example.com www.example.com")
        server_name  localhost;

        # 字符集設(shè)置(避免中文亂碼)
        charset utf-8;


        # -------------------------- location 區(qū)塊(請(qǐng)求路徑匹配)--------------------------
        # 匹配根路徑 "/"(所有未被其他 location 匹配的請(qǐng)求都會(huì)命中這里)
        location / {
            # 網(wǎng)站根目錄(靜態(tài)資源存放路徑)
            root   /usr/local/nginx/html;
            # 默認(rèn)首頁(yè)(多個(gè)頁(yè)面用空格分隔,按順序查找)
            index  index.html index.htm;
        }

        # 匹配 404 錯(cuò)誤頁(yè)面
        error_page  404              /404.html;
        # 匹配 50x 系列錯(cuò)誤(500/502/503/504)
        error_page   500 502 503 504  /50x.html;
        # 對(duì)應(yīng)錯(cuò)誤頁(yè)面的路徑配置
        location = /50x.html {
            root   /usr/local/nginx/html;
        }
    }
}

配置優(yōu)化示例:

# 在nginx.conf的main塊中設(shè)置
worker_processes auto;  # 自動(dòng)設(shè)置為CPU核心數(shù)
worker_cpu_affinity auto;  # 自動(dòng)綁定CPU核心

# 設(shè)置每個(gè)Worker進(jìn)程的最大文件打開數(shù)
worker_rlimit_nofile 100000;

events {
    worker_connections 4096;  # 每個(gè)Worker的最大連接數(shù)
    use epoll;  # Linux高性能事件模型
    multi_accept on;  # 一次接受所有新連接
}

1.3 安裝:Linux 里的 Nginx 魔法:從下載到部署,輕松拿捏!

二、核心架構(gòu)與配置解析:讀懂 Nginx 的 "運(yùn)行邏輯"

2.1 架構(gòu)精髓:Master-Worker 進(jìn)程模型

Nginx 采用經(jīng)典的 Master-Worker 多進(jìn)程架構(gòu),這種設(shè)計(jì)確保了高穩(wěn)定性和性能。

進(jìn)程架構(gòu)詳解:

Master Process (PID: 1234) [管理者]
├── Worker Process (PID: 1235)  [處理客戶端請(qǐng)求]
├── Worker Process (PID: 1236)  [處理客戶端請(qǐng)求]
├── Worker Process (PID: 1237)  [處理客戶端請(qǐng)求]
├── Cache Loader Process (PID: 1238) [只在啟動(dòng)時(shí)出現(xiàn),用于初始化緩存索引,完成后自動(dòng)退出]
└── Cache Manager Process (PID: 1239) [常駐的“后臺(tái)管家”,定期清理過期緩存]

各進(jìn)程職責(zé):

  • Master 進(jìn)程

    • 讀取和驗(yàn)證配置文件

    • 管理 Worker 進(jìn)程(啟動(dòng)、停止、重載)

    • 平滑升級(jí)(不中斷服務(wù)的情況下更新版本)

  • Worker 進(jìn)程

    • 實(shí)際處理客戶端請(qǐng)求

    • 每個(gè)進(jìn)程獨(dú)立運(yùn)行,互不干擾

    • 采用事件驅(qū)動(dòng)模型,非阻塞處理

  •  Cache Manager 進(jìn)程:

    • 專職負(fù)責(zé)緩存的過期與清理,是 Nginx 緩存系統(tǒng)的“后臺(tái)管家”

2.2 配置骨架:從 http 到 location 的層級(jí)關(guān)系

Nginx 配置文件采用層次化的“區(qū)塊嵌套”結(jié)構(gòu),理解這種結(jié)構(gòu)是掌握配置的關(guān)鍵

核心層級(jí)為:main(全局)→ events(事件)→ http(HTTP 協(xié)議)

→ server(虛擬主機(jī))→ location(請(qǐng)求匹配)。

層級(jí)上下文作用范圍核心作用
Main全局整個(gè) Nginx 實(shí)例配置進(jìn)程、日志、用戶等全局參數(shù)
Eventsevents網(wǎng)絡(luò)連接配置最大連接數(shù)、連接處理模型,影響性能
HTTPhttp所有 HTTP/HTTPS 流量配置協(xié)議級(jí)通用參數(shù)(日志、壓縮、MIME等)
Serverserver單個(gè)虛擬主機(jī)(網(wǎng)站)基于域名/IP/端口區(qū)分不同網(wǎng)站
Locationlocation虛擬主機(jī)內(nèi)的特定 URI對(duì)請(qǐng)求路徑進(jìn)行最精細(xì)化的處理和控制

配置層次結(jié)構(gòu):

# ==================== 層級(jí)1: Main Context (全局配置) ====================
worker_processes auto;                      # 工作進(jìn)程數(shù),建議設(shè)為 CPU 核心數(shù)
error_log /var/log/nginx/error.log warn;    # 全局錯(cuò)誤日志路徑與級(jí)別
pid /run/nginx.pid;                         # 進(jìn)程 PID 文件路徑

# ==================== 層級(jí)2: Events Context (事件配置) ==================
events {
    worker_connections 1024;                # 每個(gè)工作進(jìn)程的最大連接數(shù)
    use epoll;                              # Linux 系統(tǒng)推薦使用 epoll 事件模型
    multi_accept on;                        # 允許一個(gè)連接同時(shí)處理多個(gè)請(qǐng)求
}

# ==================== 層級(jí)3: HTTP Context (HTTP協(xié)議配置) ================
http {
    include /etc/nginx/mime.types;          # 引入 MIME 類型映射文件
    default_type application/octet-stream;  # 未知文件類型的默認(rèn) Content-Type

    # 定義日志格式
    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;  # 訪問日志路徑和格式

    # 性能優(yōu)化指令
    sendfile on;                            # 啟用零拷貝傳輸
    tcp_nopush on;                          # 優(yōu)化數(shù)據(jù)包發(fā)送,減少網(wǎng)絡(luò)報(bào)文
    tcp_nodelay on;                         # 禁用 Nagle 算法,降低延遲
    keepalive_timeout 65;                   # 客戶端連接保持超時(shí)時(shí)間

    # 啟用 Gzip 壓縮
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;

    # ==================== 層級(jí)4: Server Context (虛擬主機(jī)配置) ============
    server {
        listen 80;                          # 監(jiān)聽 80 端口(HTTP)
        server_name example.com www.example.com;  # 綁定的域名

        # 字符集設(shè)置,避免中文亂碼
        charset utf-8;

        # ==================== 層級(jí)5: Location Context (URI匹配配置) =======
        location / {
            root /var/www/html;             # 網(wǎng)站根目錄
            index index.html index.htm;     # 默認(rèn)首頁(yè)文件
        }

        # 靜態(tài)資源緩存優(yōu)化
        location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
            root /var/www/static;
            expires 1y;                     # 緩存 1 年
            add_header Cache-Control "public, immutable";
        }

        # 錯(cuò)誤頁(yè)面配置
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
        
        location = /50x.html {
            root /var/www/html;
        }
    }
}

Location 匹配規(guī)則詳解:

Nginx 的 location 塊支持多種匹配方式,優(yōu)先級(jí)從高到低:

server {
    # 1. 精確匹配 (=) - 最高優(yōu)先級(jí)
    location = /exact-path {
        return 200 "This is an exact match";
    }
    
    # 2. 優(yōu)先前綴匹配 (^~) - 第二優(yōu)先級(jí)
    location ^~ /static/ {
        root /var/www;
        # 此配置會(huì)阻止后續(xù)的正則匹配
    }
    
    # 3. 正則匹配 (~ 區(qū)分大小寫, ~* 不區(qū)分大小寫)
    location ~ \.php$ {
        # 處理PHP文件
        fastcgi_pass 127.0.0.1:9000;
    }
    
    location ~* \.(jpg|png|gif)$ {
        # 處理圖片文件,不區(qū)分大小寫
        expires 30d;
    }
    
    # 4. 普通前綴匹配 - 最低優(yōu)先級(jí)
    location / {
        # 通用匹配
        try_files $uri $uri/ =404;
    }
}

2.3 靜態(tài)資源服務(wù):Nginx 的 "原生強(qiáng)項(xiàng)"

Nginx 在處理靜態(tài)資源方面具有天然優(yōu)勢(shì),正確的配置可以極大提升性能。

基礎(chǔ)靜態(tài)服務(wù)配置:

server {
    listen 80;
    server_name static.example.com;
    
    # 基礎(chǔ)靜態(tài)文件服務(wù)
    location / {
        root /var/www/html;  # 設(shè)置根目錄路徑
        index index.html index.htm;  # 默認(rèn)索引文件
    
        # 性能優(yōu)化設(shè)置
        sendfile on;  # 啟用零拷貝傳輸,繞過用戶空間直接在內(nèi)核處理文件發(fā)送
        tcp_nopush on;  # 在sendfile啟用時(shí),優(yōu)化數(shù)據(jù)包發(fā)送,減少網(wǎng)絡(luò)報(bào)文數(shù)量
    
        # 緩存控制
        expires 1h;  # 設(shè)置瀏覽器緩存1小時(shí)(HTTP響應(yīng)頭Expires和Cache-Control)
        add_header Cache-Control "public";  # 允許所有緩存(CDN、代理、瀏覽器)緩存資源
    }

    # 圖片文件特殊處理
    location ~* \.(jpg|jpeg|png|gif|ico|webp)$ {
        root /var/www/images;
        
        # 更長(zhǎng)的緩存時(shí)間
        expires 1y;
        add_header Cache-Control "public, immutable";
        
        # 圖片優(yōu)化
        image_filter resize 800 600;  # 可選:圖片處理
    }
    
    # CSS和JS文件
    location ~* \.(css|js)$ {
        root /var/www/assets;
        expires 7d;
        add_header Cache-Control "public";
        
        # Gzip壓縮
        gzip on;
        gzip_types text/css application/javascript;
    }
}

高級(jí)靜態(tài)資源優(yōu)化:

http {
    # 文件訪問緩存配置(優(yōu)化靜態(tài)文件讀取性能)
    # 啟用文件描述符緩存,最多緩存10000個(gè)文件描述符,30秒內(nèi)未被訪問則移除緩存
    open_file_cache max=10000 inactive=30s;
    # 每60秒檢查一次緩存中文件的有效性(如是否被修改)
    open_file_cache_valid 60s;
    # 一個(gè)文件至少被訪問2次后才會(huì)被緩存(避免緩存低頻訪問文件)
    open_file_cache_min_uses 2;
    # 緩存文件訪問錯(cuò)誤(如文件不存在、權(quán)限問題),避免重復(fù)校驗(yàn)錯(cuò)誤狀態(tài)
    open_file_cache_errors on;
    
    # Gzip壓縮配置(減少網(wǎng)絡(luò)傳輸數(shù)據(jù)量,提升加載速度)
    gzip on;  # 開啟Gzip壓縮
    gzip_vary on;  # 在響應(yīng)頭中添加Vary: Accept-Encoding,告知客戶端支持壓縮
    gzip_min_length 1024;  # 僅壓縮大小超過1024字節(jié)的文件(小文件壓縮收益低)
    # 指定需要壓縮的MIME類型(文件類型)
    gzip_types
        text/plain          # 純文本
        text/css            # CSS樣式表
        text/xml            # XML文檔
        text/javascript     # JS腳本(舊標(biāo)準(zhǔn))
        application/javascript  # JS腳本(新標(biāo)準(zhǔn))
        application/xml+rss     # RSS訂閱XML
        application/json;       # JSON數(shù)據(jù)
}

三、關(guān)鍵應(yīng)用場(chǎng)景:Nginx 實(shí)戰(zhàn)核心技能

3.1 反向代理:隱藏后端,統(tǒng)一入口

反向代理是 Nginx 最常用的功能之一,它隱藏了后端服務(wù)器的細(xì)節(jié),提供了統(tǒng)一的訪問入口。

基礎(chǔ)反向代理配置:

客戶端請(qǐng)求 → Nginx (監(jiān)聽80端口) → 根據(jù)server_name匹配 → Location / 處理 → 轉(zhuǎn)發(fā)到proxy_pass代理的后端服務(wù)器組→ upstream  定義后端服務(wù)器集群

server {
    listen 80;
    server_name example.com;
    
    location / {
        # 基本代理設(shè)置
        proxy_pass http://backend_server;
        
        # 重要的請(qǐng)求頭設(shè)置(確保后端服務(wù)器能獲取正確的客戶端信息,而不是看到代理服務(wù)器的IP)
        proxy_set_header Host $host;                    # 保持原始域名
        proxy_set_header X-Real-IP $remote_addr;        # 傳遞客戶端真實(shí)IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 代理鏈IP記錄
        proxy_set_header X-Forwarded-Proto $scheme;     # 傳遞原始協(xié)議(http/https)

        # 超時(shí)設(shè)置(防止因后端服務(wù)響應(yīng)慢而阻塞 Nginx 工作進(jìn)程)
        proxy_connect_timeout 30s;  # 連接后端超時(shí)時(shí)間
        proxy_send_timeout 30s;     # 發(fā)送請(qǐng)求到后端超時(shí)時(shí)間  
        proxy_read_timeout 30s;     # 讀取后端響應(yīng)超時(shí)時(shí)間
        
        # 緩沖優(yōu)化(緩沖后端響應(yīng),減少后端服務(wù)器連接保持時(shí)間,優(yōu)化對(duì)客戶端的響應(yīng)傳輸,防止快速客戶端拖慢慢速后端)
        proxy_buffering on;
        proxy_buffer_size 4k;       # 響應(yīng)頭緩沖區(qū)大小
        proxy_buffers 8 4k;         # 響應(yīng)體緩沖區(qū)(8個(gè)4k塊)
    }
}

# 定義后端服務(wù)器組
upstream backend_server {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

高級(jí)代理配置:

location /api/ {
    # 將匹配 /api/ 路徑的請(qǐng)求代理到名為 api_backend 的后端服務(wù)器組
    proxy_pass http://api_backend;
    
    # ======================
    # 錯(cuò)誤處理與故障轉(zhuǎn)移配置
    # ======================
    
    # 定義在什么情況下應(yīng)該嘗試下一個(gè)上游服務(wù)器
    # error:          與后端服務(wù)器建立連接、發(fā)送請(qǐng)求或讀取響應(yīng)時(shí)發(fā)生錯(cuò)誤
    # timeout:        與后端服務(wù)器連接、發(fā)送或讀取超時(shí)
    # invalid_header: 后端服務(wù)器返回空或無(wú)效的響應(yīng)頭
    # http_500:       后端服務(wù)器返回500狀態(tài)碼
    # http_502:       后端服務(wù)器返回502狀態(tài)碼  
    # http_503:       后端服務(wù)器返回503狀態(tài)碼
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
    
    # 指定故障轉(zhuǎn)移的最大重試次數(shù)(包括第一次請(qǐng)求)
    # 這里設(shè)置為3次,意味著如果第一個(gè)服務(wù)器失敗,會(huì)再嘗試另外兩個(gè)服務(wù)器
    proxy_next_upstream_tries 3;
    
    # 設(shè)置故障轉(zhuǎn)移的超時(shí)時(shí)間限制
    # 在30秒內(nèi)如果沒有成功響應(yīng),則停止嘗試其他服務(wù)器并返回錯(cuò)誤
    proxy_next_upstream_timeout 30s;
    
    # ======================
    # 連接池配置(性能優(yōu)化)
    # ======================
    
    # 設(shè)置與每個(gè)后端服務(wù)器保持的最大空閑keepalive連接數(shù)
    # 保持連接復(fù)用可以減少TCP握手開銷,提高性能
    keepalive 32;
    
    # 設(shè)置keepalive連接的最大空閑時(shí)間
    # 超過30秒未使用的連接將被關(guān)閉
    keepalive_timeout 30s;
    
    # 單個(gè)keepalive連接上允許處理的最大請(qǐng)求數(shù)
    # 達(dá)到100個(gè)請(qǐng)求后連接將被關(guān)閉,防止連接老化
    keepalive_requests 100;
    
    # ======================
    # 超時(shí)與重試機(jī)制
    # ======================
    
    # 與后端服務(wù)器建立連接的超時(shí)時(shí)間
    # 如果5秒內(nèi)無(wú)法建立連接,將觸發(fā)錯(cuò)誤處理
    proxy_connect_timeout 5s;
    
    # 向后端服務(wù)器發(fā)送請(qǐng)求的超時(shí)時(shí)間
    # 如果10秒內(nèi)無(wú)法發(fā)送完所有請(qǐng)求數(shù)據(jù),將觸發(fā)錯(cuò)誤處理
    proxy_send_timeout 10s;
    
    # 從后端服務(wù)器讀取響應(yīng)的超時(shí)時(shí)間
    # 如果30秒內(nèi)沒有收到任何數(shù)據(jù),將觸發(fā)錯(cuò)誤處理
    # 對(duì)于API接口,這個(gè)值通常設(shè)置得比連接和發(fā)送超時(shí)長(zhǎng)
    proxy_read_timeout 30s;
}

3.2 負(fù)載均衡:分?jǐn)倝毫Γ嵘捎?/h3>

Nginx 提供多種負(fù)載均衡算法,可以根據(jù)業(yè)務(wù)需求選擇合適的策略。

負(fù)載均衡配置示例:

upstream backend_cluster {
    # 負(fù)載均衡算法
    least_conn;  # 最少連接數(shù)算法
    
    # 服務(wù)器定義
    server 192.168.1.10:8080 weight=3 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 weight=2 max_fails=3 fail_timeout=30s;
    server 192.168.1.12:8080 weight=1 max_fails=3 fail_timeout=30s;
    server 192.168.1.13:8080 backup;  # 備份服務(wù)器
}

server {
    listen 80;
    server_name app.example.com;
    
    location / {
        proxy_pass http://backend_cluster;
        proxy_set_header Host $host;
        # 其他代理配置...
    }
}

不同負(fù)載均衡算法:

# 1. 輪詢(默認(rèn))
upstream round_robin {
    server backend1.example.com;
    server backend2.example.com;
}

# 2. 加權(quán)輪詢
upstream weighted_round_robin {
    server backend1.example.com weight=5;  # 處理50%的請(qǐng)求
    server backend2.example.com weight=3;  # 處理30%的請(qǐng)求
    server backend3.example.com weight=2;  # 處理20%的請(qǐng)求
}

# 3. IP哈希(會(huì)話保持)
upstream ip_hash {
    ip_hash;  # 基于客戶端IP的哈希
    server backend1.example.com;
    server backend2.example.com;
}

# 4. 最少連接數(shù)
upstream least_conn {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}

# 5. 基于響應(yīng)時(shí)間的負(fù)載均衡(需要商業(yè)版)
upstream response_time {
    fair;
    server backend1.example.com;
    server backend2.example.com;
}

3.3 動(dòng)靜分離:各司其職,極致性能

動(dòng)靜分離是提升網(wǎng)站性能的重要手段,將動(dòng)態(tài)請(qǐng)求和靜態(tài)請(qǐng)求分別處理。

完整的動(dòng)靜分離配置:

upstream dynamic_backend {
    server 192.168.1.20:8000;
    server 192.168.1.21:8000;
}

server {
    listen 80;
    server_name www.example.com;
    
    # 靜態(tài)資源 - 直接由Nginx處理
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt)$ {
        root /var/www/static;
        
        # 緩存優(yōu)化
        expires 1y;
        add_header Cache-Control "public, immutable";
        
        # 性能優(yōu)化
        sendfile on;
        tcp_nopush on;
        
        # 如果文件不存在,不代理到后端
        try_files $uri =404;
    }
    
    # 動(dòng)態(tài)請(qǐng)求 - 代理到后端應(yīng)用服務(wù)器
    location / {
        proxy_pass http://dynamic_backend;
        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;
    }
    
    # API請(qǐng)求單獨(dú)處理
    location /api/ {
        proxy_pass http://dynamic_backend;
        # 特殊的API配置...
    }
}

3.4 SSL/TLS 終端代理:打造 HTTPS 安全站點(diǎn)

Nginx 可以作為 SSL/TLS 終端,處理加密連接,減輕后端服務(wù)器的負(fù)擔(dān)。

完整的 HTTPS 配置:

# HTTPS服務(wù)器配置
server {
    listen 443 ssl http2;  # 啟用HTTP/2
    server_name example.com;
    
    # SSL證書配置
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    
    # SSL協(xié)議配置
    ssl_protocols TLSv1.2 TLSv1.3;  # 禁用不安全的舊協(xié)議
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    
    # SSL性能優(yōu)化
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;
    
    # 安全頭設(shè)置
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    
    # 應(yīng)用配置
    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
    }
}

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

四、性能優(yōu)化與安全加固:讓 Nginx 更穩(wěn)更快

4.1 性能調(diào)優(yōu):從配置到內(nèi)核的全維度優(yōu)化

Nginx 配置層優(yōu)化:

# nginx.conf 中的性能優(yōu)化配置
http {
    # 基礎(chǔ)性能設(shè)置
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    keepalive_requests 1000;
    
    # 緩沖優(yōu)化
    client_body_buffer_size 128k;
    client_max_body_size 10m;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 4k;
    
    # Gzip壓縮優(yōu)化
    gzip on;
    gzip_min_length 1024;
    gzip_types
        text/plain
        text/css
        text/xml
        text/javascript
        application/javascript
        application/xml+rss
        application/json;
    
    # 文件緩存優(yōu)化
    open_file_cache max=10000 inactive=30s;
    open_file_cache_valid 60s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
}

# 事件模塊優(yōu)化
events {
    worker_connections 2048;
    use epoll;
    multi_accept on;
}

操作系統(tǒng)層優(yōu)化:

# 調(diào)整內(nèi)核參數(shù)(/etc/sysctl.conf)
echo 'net.core.somaxconn = 65535' >> /etc/sysctl.conf
echo 'net.core.netdev_max_backlog = 65536' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_max_syn_backlog = 65536' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_fin_timeout = 30' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_tw_reuse = 1' >> /etc/sysctl.conf
echo 'fs.file-max = 100000' >> /etc/sysctl.conf

# 應(yīng)用配置
sysctl -p

4.2 安全加固:抵御常見攻擊

基礎(chǔ)安全配置:

server {
    # 隱藏Nginx版本信息
    server_tokens off;
    
    # 安全頭設(shè)置
    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 "strict-origin-when-cross-origin" always;
    
    # 限制請(qǐng)求方法
    if ($request_method !~ ^(GET|HEAD|POST)$) {
        return 405;
    }
    
    # 防止點(diǎn)擊劫持
    add_header X-Frame-Options "SAMEORIGIN";
    
    # 限制文件上傳大小
    client_max_body_size 10m;
}

# 速率限制防御DDoS
http {
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
    limit_req_zone $binary_remote_addr zone=login:10m rate=1r/m;
    
    server {
        location /api/ {
            limit_req zone=api burst=20 nodelay;
            # API配置...
        }
        
        location /login {
            limit_req zone=login burst=5;
            # 登錄配置...
        }
    }
}

高級(jí)安全防護(hù):

# 防止SQL注入和XSS攻擊
server {
    # 屏蔽敏感文件
    location ~ /\.(ht|git|svn) {
        deny all;
    }
    
    location ~* \.(bak|config|sql|log)$ {
        deny all;
    }
    
    # 防止圖片盜鏈
    location ~* \.(jpg|jpeg|png|gif)$ {
        valid_referers none blocked server_names ~\.google\. ~\.baidu\.;
        if ($invalid_referer) {
            return 403;
            # 或者返回一個(gè)默認(rèn)圖片
            # rewrite ^ /images/blocked.png;
        }
    }
}

五、總結(jié)與展望:Nginx 的核心價(jià)值與未來(lái)

5.1 核心價(jià)值總結(jié)

通過本文的學(xué)習(xí),我們可以看到 Nginx 的核心價(jià)值體現(xiàn)在:

  1. 卓越的性能:事件驅(qū)動(dòng)架構(gòu)輕松應(yīng)對(duì)高并發(fā)場(chǎng)景

  2. 靈活的配置:模塊化設(shè)計(jì)支持各種復(fù)雜業(yè)務(wù)需求

  3. 穩(wěn)定的運(yùn)行:Master-Worker 進(jìn)程模型確保服務(wù)高可用

  4. 豐富的生態(tài):大量第三方模塊擴(kuò)展功能邊界

5.2 Nginx 與其他技術(shù)的對(duì)比

特性NginxApacheCaddy
性能????????????
配置復(fù)雜度????????????
功能豐富度?????????????
學(xué)習(xí)曲線????????????
社區(qū)生態(tài)?????????????

5.3 未來(lái)發(fā)展趨勢(shì)

  1. 云原生支持:Nginx 在 Kubernetes 生態(tài)中作為 Ingress Controller 廣泛應(yīng)用

  2. 邊緣計(jì)算:作為邊緣節(jié)點(diǎn)處理計(jì)算和緩存任務(wù)

  3. API 網(wǎng)關(guān):功能不斷豐富,向全功能 API 網(wǎng)關(guān)演進(jìn)

  4. 安全增強(qiáng):集成更多安全功能,如 WAF、Bot 防護(hù)等

附錄:Nginx 常用工具與資源

常用命令速查

# 測(cè)試配置
nginx -t
 
# 重新加載配置(不中斷服務(wù))
nginx -s reload
 
# 重新打開日志文件
nginx -s reopen
 
# 優(yōu)雅停止
nginx -s quit

到此這篇關(guān)于Nginx從入門到精通:2026最新中文教程,覆蓋安裝、配置、反向代理與負(fù)載均衡的文章就介紹到這了,更多相關(guān)Nginx全面解析與實(shí)戰(zhàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 開發(fā)、運(yùn)維不可不看的Linux調(diào)測(cè)工具【推薦】

    開發(fā)、運(yùn)維不可不看的Linux調(diào)測(cè)工具【推薦】

    這篇文章主要介紹了開發(fā)、運(yùn)維不可不看的Linux調(diào)測(cè)工具,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • linux之umask權(quán)限掩碼解讀

    linux之umask權(quán)限掩碼解讀

    這篇文章主要介紹了linux之umask權(quán)限掩碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Linux進(jìn)程狀態(tài)和優(yōu)先級(jí)的用法及說明

    Linux進(jìn)程狀態(tài)和優(yōu)先級(jí)的用法及說明

    文章詳細(xì)介紹了操作系統(tǒng)中進(jìn)程狀態(tài)(運(yùn)行、阻塞、掛起)的概念及Linux操作系統(tǒng)中的具體狀態(tài)(R、S、D、T、t、X、Z),解釋了進(jìn)程的運(yùn)行、阻塞、掛起狀態(tài)的區(qū)別,具體狀態(tài)標(biāo)識(shí)及操作方法,如使用kill命令或Ctrl+C中斷進(jìn)程等
    2026-04-04
  • CentOS 7中Nginx日志定時(shí)拆分實(shí)現(xiàn)過程詳解

    CentOS 7中Nginx日志定時(shí)拆分實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了CentOS 7中Nginx日志定時(shí)拆分實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • CentOS7 修改網(wǎng)卡名稱為eth0&在VMWare中添加多網(wǎng)卡配置

    CentOS7 修改網(wǎng)卡名稱為eth0&在VMWare中添加多網(wǎng)卡配置

    這篇文章主要介紹了CentOS7 修改網(wǎng)卡名稱為eth0&在VMWare中添加多網(wǎng)卡配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • 如何在Linux中route?add命令添加路由(Linux?route)

    如何在Linux中route?add命令添加路由(Linux?route)

    route?add命令是用于管理Linux操作系統(tǒng)網(wǎng)絡(luò)路由,允許用戶添加、刪除或修改網(wǎng)絡(luò)路由表中的條目,在Linux系統(tǒng)上添加靜態(tài)路由,靜態(tài)路由是手動(dòng)配置的路由,它指定了數(shù)據(jù)包從一個(gè)網(wǎng)絡(luò)到達(dá)另一個(gè)網(wǎng)絡(luò)的路徑,通過添加靜態(tài)路由,可實(shí)現(xiàn)網(wǎng)絡(luò)分段、轉(zhuǎn)發(fā)和通信等
    2024-06-06
  • Linux alias命令編寫

    Linux alias命令編寫

    這篇文章主要介紹了Linux alias命令編寫,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-08-08
  • CentOS6.8單用戶模式如何修改密碼

    CentOS6.8單用戶模式如何修改密碼

    CentOS6.8單用戶模式下如何修改密碼?這篇文章主要為大家介紹了CentOS6.8單用戶模式修改密碼的詳細(xì)步驟
    2017-06-06
  • CentOS服務(wù)器下安裝Webmin管理系統(tǒng)的步驟

    CentOS服務(wù)器下安裝Webmin管理系統(tǒng)的步驟

    如果你想像windows圖形化管理系統(tǒng),Webmin無(wú)疑是最好的選擇。
    2011-03-03
  • .htaccess文件使用教程總結(jié)

    .htaccess文件使用教程總結(jié)

    .htaccess是一個(gè)站點(diǎn)管理員可以應(yīng)用的強(qiáng)大工具,有更多的變化以適應(yīng)不同的用途,可以節(jié)約時(shí)間及提高網(wǎng)站的安全性
    2008-06-06

最新評(píng)論

南漳县| 司法| 九龙坡区| 嘉荫县| 乐昌市| 库尔勒市| 桐柏县| 寿宁县| 诏安县| 莆田市| 漠河县| 中阳县| 昌吉市| 密山市| 安乡县| 嘉祥县| 吉水县| 沭阳县| 临夏县| 博湖县| 泰宁县| 云龙县| 合山市| 宣城市| 三原县| 云浮市| 饶阳县| 越西县| 崇仁县| 沙雅县| 苍溪县| 古交市| 毕节市| 宜兴市| 太白县| 广昌县| 许昌市| 城步| 巴南区| 隆德县| 木兰县|