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

Nginx概念、架構(gòu)、配置與虛擬主機(jī)實(shí)戰(zhàn)操作指南

 更新時(shí)間:2025年11月26日 11:34:06   作者:木童662  
Nginx是一個(gè)高性能的HTTP服務(wù)器、反向代理服務(wù)器、負(fù)載均衡器和IMAP/POP3/SMTP代理服務(wù)器,它支持高并發(fā)連接,資源占用低,功能全面且靈活,文章介紹Nginx概念、架構(gòu)、配置與虛擬主機(jī)實(shí)戰(zhàn)操作指南,感興趣的朋友跟隨小編一起看看吧

Nginx 深度解析:概念、架構(gòu)、配置與虛擬主機(jī)實(shí)戰(zhàn)

一、Nginx 的概念

Nginx(發(fā)音 “engine x”)是由俄羅斯開發(fā)者 Igor Sysoev 設(shè)計(jì)的高性能 HTTP 服務(wù)器、反向代理服務(wù)器、負(fù)載均衡器和 IMAP/POP3/SMTP 代理服務(wù)器。其核心設(shè)計(jì)理念是 “事件驅(qū)動、異步非阻塞 I/O 模型”,旨在以極低的資源消耗支撐超高并發(fā)連接,同時(shí)提供豐富的擴(kuò)展功能。

從本質(zhì)上講,Nginx 是一個(gè) “請求分發(fā)與處理中樞”:

  • 作為 Web 服務(wù)器:直接處理靜態(tài)資源(HTML、CSS、JS、圖片等)的請求,無需依賴后端應(yīng)用;
  • 作為反向代理:接收客戶端請求后,轉(zhuǎn)發(fā)到后端業(yè)務(wù)服務(wù)器(Tomcat、Node.js 等),并將響應(yīng)結(jié)果返回給客戶端,隱藏后端服務(wù)細(xì)節(jié);
  • 作為負(fù)載均衡器:將海量客戶端請求均勻分發(fā)到多臺后端服務(wù)器,提升系統(tǒng)并發(fā)能力和可用性;
  • 其他角色:支持 SSL 終結(jié)、URL 重寫、緩存、限流等附加功能,適配復(fù)雜業(yè)務(wù)場景。

Nginx 廣泛應(yīng)用于互聯(lián)網(wǎng)架構(gòu)的 “接入層”,是目前全球使用最廣泛的 Web 服務(wù)器之一(據(jù) W3Techs 統(tǒng)計(jì),全球 Top 1000 網(wǎng)站中約 60% 采用 Nginx)。

二、Nginx 的特點(diǎn)

Nginx 之所以成為行業(yè)主流,核心源于以下六大特點(diǎn),且每個(gè)特點(diǎn)都與底層設(shè)計(jì)深度綁定:

  1. 高并發(fā)支持:基于事件驅(qū)動(epoll/kqueue)和異步非阻塞 I/O 模型,單臺服務(wù)器可輕松支撐 10 萬 + 并發(fā)連接(遠(yuǎn)高于 Apache 的進(jìn)程 / 線程模型)。其核心邏輯是 “一個(gè)工作進(jìn)程處理多個(gè)連接”,避免了進(jìn)程 / 線程切換的巨大開銷;
  2. 資源占用極低:空閑狀態(tài)下內(nèi)存占用僅幾 MB,運(yùn)行時(shí) CPU 使用率遠(yuǎn)低于同類服務(wù)器。例如,4 核 8G 服務(wù)器部署 Nginx 后,僅占用 10-20MB 內(nèi)存,可將大部分資源留給業(yè)務(wù)服務(wù);
  3. 功能全面且靈活:集靜態(tài)資源服務(wù)、反向代理、負(fù)載均衡、SSL 配置、URL 重寫、緩存、限流等功能于一體,支持第三方模塊擴(kuò)展(如 Lua 腳本、圖片處理模塊);
  4. 穩(wěn)定性極強(qiáng):核心代碼簡潔(約 10 萬行),故障率極低,支持 “熱部署”(nginx -s reload)—— 無需重啟服務(wù)即可重載配置,保障業(yè)務(wù)不中斷;
  5. 跨平臺兼容:可運(yùn)行在 Linux、Windows、FreeBSD、Solaris 等多種操作系統(tǒng),主流 Linux 發(fā)行版(CentOS、Ubuntu)默認(rèn)提供安裝源;
  6. 配置簡單易維護(hù):配置文件采用文本格式,結(jié)構(gòu)清晰(塊級層級),支持主配置 + 子配置拆分,便于批量管理和自動化部署。

三、Nginx 的進(jìn)程結(jié)構(gòu)(詳細(xì)解析)

Nginx 啟動后,會生成多進(jìn)程架構(gòu),核心由 “主進(jìn)程(Master Process)” 和 “工作進(jìn)程(Worker Process)” 組成,部分場景會包含 “輔助進(jìn)程”(緩存加載進(jìn)程、日志輪轉(zhuǎn)進(jìn)程等)。這種架構(gòu)設(shè)計(jì)是 Nginx 高并發(fā)、高穩(wěn)定的核心保障,以下分進(jìn)程詳解:

3.1 進(jìn)程結(jié)構(gòu)總覽

plaintext

# 啟動 Nginx 后,通過 ps 命令查看進(jìn)程(以 4 核服務(wù)器為例)
ps -ef | grep nginx
root      1234     1  0 10:00 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     1235  1234  0 10:00 ?        00:00:02 nginx: worker process
nginx     1236  1234  0 10:00 ?        00:00:02 nginx: worker process
nginx     1237  1234  0 10:00 ?        00:00:02 nginx: worker process
nginx     1238  1234  0 10:00 ?        00:00:02 nginx: worker process
  • 1 個(gè)主進(jìn)程(root 用戶運(yùn)行,權(quán)限高,負(fù)責(zé)管理);
  • 4 個(gè)工作進(jìn)程(nginx 普通用戶運(yùn)行,權(quán)限低,負(fù)責(zé)處理請求);
  • (可選)緩存加載進(jìn)程(cache loader process):啟動時(shí)加載磁盤緩存到內(nèi)存,完成后自動退出;
  • (可選)緩存管理進(jìn)程(cache manager process):定期清理過期緩存,維持緩存大小在配置閾值內(nèi)。

3.2 主進(jìn)程(Master Process)——“管理者”

核心作用:
  1. 讀取并驗(yàn)證配置文件:啟動時(shí)加載 nginx.conf,檢查語法正確性;支持熱重載(nginx -s reload),重新讀取配置并生效,無需中斷服務(wù);
  2. 創(chuàng)建并管理工作進(jìn)程:根據(jù) worker_processes 配置(默認(rèn)與 CPU 核心數(shù)一致),通過 fork() 系統(tǒng)調(diào)用創(chuàng)建工作進(jìn)程;監(jiān)控工作進(jìn)程狀態(tài),若工作進(jìn)程異常退出,立即自動創(chuàng)建新的工作進(jìn)程,保障服務(wù)可用性;
  3. 接收并處理信號:響應(yīng)管理員發(fā)送的信號(如啟動、停止、重載、日志切割),例如:
    • kill -HUP 主進(jìn)程PID:重載配置;
    • kill -TERM 主進(jìn)程PID:優(yōu)雅停止服務(wù)(處理完當(dāng)前請求后退出);
  4. 管理輔助進(jìn)程:按需啟動緩存加載 / 管理進(jìn)程、日志輪轉(zhuǎn)進(jìn)程等。
運(yùn)行權(quán)限:

主進(jìn)程必須以 root 用戶運(yùn)行,原因是:

  • Nginx 需監(jiān)聽 80(HTTP)、443(HTTPS)等特權(quán)端口(Linux 中,非 root 用戶無法綁定 1024 以下端口);
  • 主進(jìn)程需要創(chuàng)建 / 管理工作進(jìn)程,且工作進(jìn)程通常以低權(quán)限用戶(如 nginx)運(yùn)行,避免因工作進(jìn)程被攻擊導(dǎo)致系統(tǒng)權(quán)限泄露。

3.3 工作進(jìn)程(Worker Process)——“執(zhí)行者”

核心作用:

處理客戶端的 HTTP 請求,是 Nginx 并發(fā)能力的核心載體,其工作流程如下:

  1. 競爭接收連接:所有工作進(jìn)程通過 “共享監(jiān)聽套接字”(主進(jìn)程創(chuàng)建監(jiān)聽端口后,工作進(jìn)程繼承該套接字),采用 “驚群效應(yīng)優(yōu)化”(Nginx 1.11+ 已解決)競爭接收客戶端連接;
  2. 異步非阻塞處理請求:每個(gè)工作進(jìn)程通過 epoll/kqueue 事件模型,同時(shí)處理成千上萬個(gè)連接(由 worker_connections 配置限制),無需為每個(gè)連接創(chuàng)建線程 / 進(jìn)程,資源消耗極低;
  3. 請求處理流程
    • 接收客戶端請求數(shù)據(jù);
    • 解析 HTTP 協(xié)議(請求行、請求頭、請求體);
    • 匹配 server 塊(通過監(jiān)聽端口 +server_name);
    • 匹配 location 塊(通過請求路徑);
    • 執(zhí)行處理邏輯(返回靜態(tài)資源、反向代理到后端服務(wù)、負(fù)載均衡分發(fā)等);
    • 構(gòu)建 HTTP 響應(yīng),發(fā)送給客戶端;
  4. 無狀態(tài)設(shè)計(jì):工作進(jìn)程之間完全獨(dú)立,無共享內(nèi)存,每個(gè)工作進(jìn)程處理的請求互不影響,避免了進(jìn)程間通信的開銷,也提升了穩(wěn)定性(單個(gè)工作進(jìn)程故障不影響其他進(jìn)程)。
關(guān)鍵配置與并發(fā)能力:

工作進(jìn)程的并發(fā)能力由兩個(gè)核心配置決定:

  • worker_processes:工作進(jìn)程數(shù),推薦設(shè)置為 CPU 核心數(shù)(如 4 核服務(wù)器設(shè)為 4),避免進(jìn)程切換開銷,充分利用多核 CPU;
  • worker_connections:每個(gè)工作進(jìn)程的最大連接數(shù)(默認(rèn) 1024),表示單個(gè)工作進(jìn)程可同時(shí)處理的客戶端連接數(shù)。

最大并發(fā)連接數(shù)計(jì)算公式最大并發(fā)數(shù) = worker_processes × worker_connections ÷ 2(除以 2 是因?yàn)槊總€(gè) HTTP 連接包含 “客戶端→Nginx” 和 “Nginx→后端服務(wù)” 兩個(gè)連接,若僅處理靜態(tài)資源,可無需除以 2)

例如:worker_processes=4worker_connections=1024,則最大并發(fā)連接數(shù)約為 2048。

運(yùn)行權(quán)限:

工作進(jìn)程以低權(quán)限用戶(如 nginx)運(yùn)行,由主進(jìn)程在創(chuàng)建時(shí)通過 setuid()/setgid() 系統(tǒng)調(diào)用切換用戶,目的是:

  • 降低安全風(fēng)險(xiǎn):若工作進(jìn)程被惡意攻擊,攻擊者僅能獲取 nginx 用戶權(quán)限,無法操作系統(tǒng)核心資源;
  • 限制文件訪問:工作進(jìn)程僅能訪問 nginx 用戶有權(quán)限的文件(如網(wǎng)站根目錄、日志文件),避免誤操作系統(tǒng)文件。

3.4 進(jìn)程間通信機(jī)制

Nginx 進(jìn)程間通信主要依賴以下方式:

  1. 共享內(nèi)存:用于共享配置信息(如 upstream 后端服務(wù)器狀態(tài)、緩存元數(shù)據(jù)),避免每個(gè)進(jìn)程重復(fù)加載配置,提升效率;
  2. 信號:主進(jìn)程通過信號(如 SIGCHLD)監(jiān)控工作進(jìn)程狀態(tài),工作進(jìn)程異常退出時(shí),主進(jìn)程收到信號后創(chuàng)建新的工作進(jìn)程;
  3. 文件鎖:用于日志寫入、緩存操作等場景,避免多個(gè)工作進(jìn)程同時(shí)寫入同一文件導(dǎo)致數(shù)據(jù)錯(cuò)亂。

四、Nginx 的配置(詳細(xì)解析 + 流量流程)

Nginx 的核心配置文件為 /usr/local/nginx/conf/nginx.conf(源碼安裝路徑),采用塊級層級結(jié)構(gòu),從外到內(nèi)依次為:全局塊 → I/O事件塊 → HTTP塊 → Server塊 → Location塊。

配置文件整體結(jié)構(gòu)模板

nginx

# 一、全局配置(全局塊)
worker_processes  4;                  # 工作進(jìn)程數(shù),與CPU核心數(shù)一致
error_log  logs/error.log  warn;       # 錯(cuò)誤日志路徑+日志級別
pid        logs/nginx.pid;            # PID文件路徑
worker_rlimit_nofile 65535;           # 每個(gè)工作進(jìn)程的最大文件描述符限制
# 二、I/O事件配置(events塊)
events {
    use epoll;                         # 使用epoll事件模型(Linux推薦)
    worker_connections  10240;         # 每個(gè)工作進(jìn)程最大連接數(shù)
    multi_accept on;                   # 允許工作進(jìn)程一次性接收多個(gè)連接
    accept_mutex on;                   # 開啟連接接收互斥鎖,解決驚群效應(yīng)
}
# 三、HTTP配置(http塊)
http {
    include       mime.types;          # 引入MIME類型映射文件
    default_type  application/octet-stream; # 默認(rèn)MIME類型(未知文件類型)
    # 日志格式定義(main為格式名,可在server/location塊引用)
    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  logs/access.log  main; # 訪問日志路徑+使用main格式
    # 核心性能優(yōu)化配置
    sendfile        on;                # 啟用高效文件傳輸模式(零拷貝)
    tcp_nopush      on;                # 配合sendfile,減少TCP數(shù)據(jù)包數(shù)量
    tcp_nodelay     on;                # 禁用TCP延遲,提升實(shí)時(shí)性(適用于短連接)
    keepalive_timeout  65;             # 長連接超時(shí)時(shí)間(秒)
    keepalive_requests 100;            # 每個(gè)長連接最多處理100個(gè)請求
    # 開啟gzip壓縮
    gzip  on;
    gzip_min_length  1k;               # 小于1k的文件不壓縮
    gzip_types text/plain text/css application/json application/javascript; # 壓縮的文件類型
    # 負(fù)載均衡集群配置(可選)
    upstream backend_servers {
        server 192.168.1.101:8080 weight=1; # 后端服務(wù)器1,權(quán)重1
        server 192.168.1.102:8080 weight=2; # 后端服務(wù)器2,權(quán)重2(接收更多請求)
    }
    # 四、Web服務(wù)的監(jiān)聽配置(server塊,虛擬主機(jī)核心)
    server {
        listen       80;               # 監(jiān)聽80端口(HTTP默認(rèn)端口)
        listen       192.168.1.100:80; # 綁定特定IP+端口(多IP服務(wù)器時(shí)使用)
        server_name  www.test.com test.com; # 綁定域名(多個(gè)域名用空格分隔)
        charset utf-8;                 # 網(wǎng)頁字符編碼
        access_log  logs/www.test.com.access.log  main; # 該虛擬主機(jī)的訪問日志
        # 五、其他配置(location塊,路徑匹配核心)
        # 匹配根路徑(/)
        location / {
            root   /usr/local/nginx/html; # 網(wǎng)站根目錄(靜態(tài)資源存放路徑)
            index  index.html index.htm;  # 默認(rèn)首頁文件(優(yōu)先級:index.html > index.htm)
            try_files $uri $uri/ /index.html; # 嘗試訪問文件→目錄→跳轉(zhuǎn)index.html(SPA應(yīng)用常用)
        }
        # 匹配靜態(tài)資源路徑(圖片、CSS、JS)
        location ~* \.(jpg|jpeg|png|gif|css|js)$ {
            root   /usr/local/nginx/static; # 靜態(tài)資源獨(dú)立存放目錄
            expires 7d;                    # 瀏覽器緩存7天,減少重復(fù)請求
            add_header Cache-Control "public"; # 允許緩存
        }
        # 反向代理配置(匹配/api路徑的請求)
        location /api/ {
            proxy_pass http://backend_servers; # 轉(zhuǎn)發(fā)到負(fù)載均衡集群
            proxy_set_header Host $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_connect_timeout 60;         # 代理連接超時(shí)時(shí)間
        }
        # 錯(cuò)誤頁面配置
        error_page  404              /404.html; # 404錯(cuò)誤跳轉(zhuǎn)至404.html
        error_page   500 502 503 504  /50x.html; # 5xx錯(cuò)誤跳轉(zhuǎn)至50x.html
        location = /50x.html {
            root   html; # 錯(cuò)誤頁面存放目錄
        }
    }
}

4.1 全局配置(全局塊)

核心指令解析
指令作用配置建議
worker_processes定義工作進(jìn)程數(shù),直接影響并發(fā)能力設(shè)為 CPU 核心數(shù)(grep -c "processor" /proc/cpuinfo 查看),如 4 核設(shè)為 4
error_log定義錯(cuò)誤日志的路徑和日志級別(debug/info/notice/warn/error/crit)生產(chǎn)環(huán)境設(shè)為 warn 或 error,避免日志過大;路徑建議放在 /var/log/nginx/
pid定義 Nginx 主進(jìn)程 PID 文件的存放路徑默認(rèn)在 logs/nginx.pid,無需修改,便于管理進(jìn)程
worker_rlimit_nofile限制每個(gè)工作進(jìn)程的最大文件描述符數(shù)(Linux 中,連接、文件都屬于文件描述符)設(shè)為 65535(與系統(tǒng)最大文件描述符一致,需先修改系統(tǒng)配置:echo "* soft nofile 65535" >> /etc/security/limits.conf
worker_cpu_affinity綁定工作進(jìn)程到指定 CPU 核心,避免進(jìn)程切換開銷4 核服務(wù)器配置:worker_cpu_affinity 0001 0010 0100 1000(每個(gè)進(jìn)程綁定一個(gè)核心)
流量流程中的作用:

全局配置是 Nginx 啟動時(shí)加載的 “基礎(chǔ)配置”,對所有工作進(jìn)程和服務(wù)全局生效,不直接參與請求的路由,但決定了 Nginx 的整體性能上限(如并發(fā)連接數(shù)、進(jìn)程資源限制)。

4.2 I/O 事件配置(events 塊)

核心指令解析
指令作用配置建議
use指定 I/O 事件模型(epoll/kqueue/poll/select)Linux 系統(tǒng)優(yōu)先選 epoll(高效處理海量并發(fā)連接);FreeBSD 選 kqueue;Windows 選 select
worker_connections每個(gè)工作進(jìn)程的最大連接數(shù)(包括客戶端連接、后端代理連接)1G 內(nèi)存服務(wù)器設(shè)為 10240,2G 設(shè)為 20480,需與 worker_processes 配合調(diào)整最大并發(fā)數(shù)
multi_accept允許工作進(jìn)程一次性接收多個(gè)新連接(默認(rèn) off)開啟(on),提升連接接收效率,尤其高并發(fā)場景
accept_mutex開啟連接接收互斥鎖(默認(rèn) on),解決 “驚群效應(yīng)”(多個(gè)工作進(jìn)程同時(shí)競爭一個(gè)連接,導(dǎo)致資源浪費(fèi))保持開啟,避免驚群效應(yīng)導(dǎo)致的性能損耗
worker_aio_requests每個(gè)工作進(jìn)程的異步 I/O 請求數(shù)(適用于大文件傳輸)設(shè)為 1024,提升大文件(如視頻、安裝包)的傳輸效率
流量流程中的作用:

I/O 事件配置決定了工作進(jìn)程 “如何接收和處理網(wǎng)絡(luò)連接”,是 Nginx 高并發(fā)的核心保障。當(dāng)客戶端發(fā)起連接時(shí),工作進(jìn)程通過配置的事件模型(如 epoll)監(jiān)聽連接事件,高效接收并處理連接,避免阻塞。

4.3 HTTP 配置(http 塊)

HTTP 塊是 Nginx 處理 HTTP/HTTPS 請求的 “核心全局配置”,包含所有與 HTTP 協(xié)議相關(guān)的配置,且可嵌套多個(gè) server 塊(虛擬主機(jī))。

核心指令解析
指令作用配置建議
include mime.types引入 MIME 類型映射文件(定義文件擴(kuò)展名與 Content-Type 的對應(yīng)關(guān)系,如 .html → text/html)必須配置,否則 Nginx 無法正確返回文件的 Content-Type 頭,導(dǎo)致瀏覽器無法識別文件
default_type未匹配到 MIME 類型時(shí)的默認(rèn)類型默認(rèn)為 application/octet-stream(瀏覽器會下載文件),無需修改
log_format定義訪問日志的格式(可自定義字段,如 IP、時(shí)間、請求路徑、狀態(tài)碼)生產(chǎn)環(huán)境保留 main 格式,便于日志分析(如統(tǒng)計(jì)訪問 IP、錯(cuò)誤請求)
access_log定義訪問日志的路徑和使用的格式每個(gè)虛擬主機(jī)可單獨(dú)配置,便于區(qū)分不同網(wǎng)站的日志
sendfile開啟 “零拷貝” 文件傳輸模式(Nginx 直接將文件數(shù)據(jù)從磁盤寫入網(wǎng)絡(luò)套接字,無需經(jīng)過用戶態(tài)緩沖區(qū))開啟(on),大幅提升靜態(tài)資源傳輸效率,減少 CPU 占用
tcp_nopush配合 sendfile 使用,將多個(gè)小數(shù)據(jù)包合并為一個(gè)數(shù)據(jù)包發(fā)送,減少 TCP 握手次數(shù)開啟(on),提升網(wǎng)絡(luò)傳輸效率
tcp_nodelay禁用 TCP 延遲(Nagle 算法),立即發(fā)送小數(shù)據(jù)包,提升實(shí)時(shí)性短連接(如 API 接口)開啟(on),長連接(如文件下載)關(guān)閉(off
keepalive_timeout長連接(HTTP/1.1)的超時(shí)時(shí)間,客戶端在超時(shí)前可復(fù)用連接發(fā)送多個(gè)請求設(shè)為 60 秒,減少連接建立 / 關(guān)閉的開銷,提升并發(fā)能力
gzip開啟 gzip 壓縮,減少文本類文件(HTML、CSS、JS、JSON)的傳輸體積開啟(on),配合 gzip_types 配置需要壓縮的文件類型
upstream定義負(fù)載均衡集群(后端業(yè)務(wù)服務(wù)器組),用于反向代理時(shí)的請求分發(fā)后端多服務(wù)器部署時(shí)配置,支持輪詢、權(quán)重、IP 哈希等負(fù)載策略
流量流程中的作用:

客戶端請求到達(dá) Nginx 后,首先進(jìn)入 HTTP 塊進(jìn)行 “全局預(yù)處理”:

  1. 解析 HTTP 協(xié)議,識別請求行(方法、路徑、協(xié)議版本)、請求頭;
  2. 應(yīng)用 gzip 壓縮配置(若請求頭支持壓縮);
  3. 記錄訪問日志(按 log_format 格式);
  4. 根據(jù)請求的 “監(jiān)聽端口” 和 “Host 頭”,匹配對應(yīng)的 server 塊,進(jìn)入虛擬主機(jī)處理流程。

4.4 Web 服務(wù)的監(jiān)聽配置(server 塊)

server 塊是 “虛擬主機(jī)” 的核心配置,每個(gè) server 塊對應(yīng)一個(gè)獨(dú)立的 Web 服務(wù)(可理解為一個(gè)網(wǎng)站),通過 listen(監(jiān)聽端口)和 server_name(綁定域名 / IP)區(qū)分不同的虛擬主機(jī)。

核心指令解析
指令作用配置示例
listen定義虛擬主機(jī)的監(jiān)聽端口 / IP + 端口,支持多端口監(jiān)聽- 監(jiān)聽所有 IP 的 80 端口:listen 80;- 監(jiān)聽特定 IP 的 80 端口:listen 192.168.1.100:80;- 監(jiān)聽 HTTPS 端口:listen 443 ssl;
server_name定義虛擬主機(jī)綁定的域名 / IP,支持精確匹配、泛域名匹配、正則匹配- 精確匹配:server_name www.test.com test.com;- 泛域名匹配:server_name *.test.com;(匹配所有子域名)- 正則匹配:server_name ~^www\.(.*)\.com$;(匹配 www.xxx.com 格式域名)
charset定義網(wǎng)頁的字符編碼(如 UTF-8、GBK)設(shè)為 utf-8,避免中文亂碼
access_log定義該虛擬主機(jī)的獨(dú)立訪問日志路徑建議包含域名,如 logs/www.test.com.access.log,便于日志拆分和分析
流量路由邏輯(關(guān)鍵):

Nginx 如何通過 listen 和 server_name 匹配虛擬主機(jī)?

  1. 第一步:匹配 listen 端口 —— 客戶端請求的端口必須與 server 塊的 listen 配置一致,否則直接拒絕;
  2. 第二步:匹配 server_name—— 根據(jù)客戶端請求頭中的 Host 字段(如 Host: www.test.com),按以下優(yōu)先級匹配:
    • 精確匹配(如 www.test.com);
    • 左泛域名匹配(如 *.test.com);
    • 右泛域名匹配(如 www.*);
    • 正則匹配(如 ~^www\..*\.com$);
    • 默認(rèn)匹配(第一個(gè) listen 端口一致的 server 塊,或 server_name _; 的塊)。
流量流程中的作用:

經(jīng)過 HTTP 塊預(yù)處理后,請求根據(jù) “端口 + Host” 匹配到對應(yīng)的 server 塊,進(jìn)入該虛擬主機(jī)的專屬處理流程,后續(xù)的 location 塊匹配、請求處理都基于該 server 塊的配置。

4.5 其他配置(location 塊)

location 塊是 server 塊的子配置,用于 “按請求路徑匹配處理邏輯”,是 Nginx 路由配置的核心。一個(gè) server 塊可包含多個(gè) location 塊,按匹配優(yōu)先級執(zhí)行。

核心指令解析
指令作用配置示例
location 匹配規(guī)則定義請求路徑的匹配規(guī)則,支持多種匹配模式(見下文)- 前綴匹配:location /api/ { ... }- 精確匹配:location = /index.html { ... }- 正則匹配:`location ~* .(jpgpng)$ { ... }`
root定義靜態(tài)資源的根目錄,請求路徑會拼接在 root 后,形成文件的絕對路徑location /static/ { root /usr/local/nginx/; } → 訪問 /static/img.jpg 時(shí),實(shí)際路徑為 /usr/local/nginx/static/img.jpg
alias定義路徑別名,直接替換請求路徑,與 root 不同(alias 不拼接路徑)location /static/ { alias /usr/local/nginx/static/; } → 效果同上,但更靈活(可自定義別名路徑)
index定義默認(rèn)首頁文件,當(dāng)請求路徑為目錄時(shí),自動查找該文件index index.html index.htm index.php;
try_files按順序嘗試訪問文件 / 目錄,若前面的路徑不存在,執(zhí)行最后一個(gè)動作(如跳轉(zhuǎn)、返回 404)try_files $uri $uri/ /index.html; → 嘗試訪問文件→目錄→跳轉(zhuǎn)至 index.html(SPA 應(yīng)用路由配置)
proxy_pass反向代理指令,將請求轉(zhuǎn)發(fā)到后端服務(wù)(如 Tomcat、負(fù)載均衡集群)proxy_pass http://backend_servers;(轉(zhuǎn)發(fā)到 upstream 集群)或 proxy_pass http://127.0.0.1:8080;(轉(zhuǎn)發(fā)到本地服務(wù))
expires配置瀏覽器緩存時(shí)間,適用于靜態(tài)資源(圖片、CSS、JS)expires 7d;(緩存 7 天),減少重復(fù)請求,提升訪問速度
error_page配置錯(cuò)誤頁面跳轉(zhuǎn),當(dāng)請求返回指定狀態(tài)碼時(shí),跳轉(zhuǎn)至對應(yīng)的頁面或路徑error_page 404 /404.html;(404 錯(cuò)誤跳轉(zhuǎn)至 404.html)
location 匹配模式與優(yōu)先級(關(guān)鍵)
匹配模式語法優(yōu)先級說明
精確匹配location = /path { ... }1(最高)完全匹配請求路徑,不包含子路徑,例如 = /index.html 僅匹配 /index.html,不匹配 /index.html?a=1
前綴匹配(^~)location ^~ /path { ... }2以 /path 開頭的路徑,匹配成功后不再檢查其他模式
正則匹配(~ 區(qū)分大小寫,~* 不區(qū)分大小寫)`location ~* .(jpgpng)$ { ... }`3按正則表達(dá)式匹配路徑,優(yōu)先級低于精確匹配和 ^~ 前綴匹配
普通前綴匹配location /path { ... }4(最低)以 /path 開頭的路徑,匹配成功后仍會檢查更高優(yōu)先級的模式
流量流程中的作用:

請求匹配到 server 塊后,進(jìn)入 location 塊匹配流程:

  1. 按優(yōu)先級順序匹配所有 location 塊的規(guī)則;
  2. 匹配成功后,執(zhí)行該 location 塊的處理邏輯:
    • 若為靜態(tài)資源請求(如圖片、HTML):通過 root/alias 找到文件,返回給客戶端(開啟 gzip 壓縮、緩存等);
    • 若為動態(tài)請求(如 /api):通過 proxy_pass 轉(zhuǎn)發(fā)到后端服務(wù),接收后端響應(yīng)后返回給客戶端;
  3. 若未匹配到任何 location 塊,執(zhí)行 server 塊的默認(rèn)邏輯(如返回 404)。

五、Nginx 虛擬主機(jī)

虛擬主機(jī)(Virtual Host)是指在一臺服務(wù)器上通過 Nginx 配置,同時(shí)運(yùn)行多個(gè)獨(dú)立的 Web 服務(wù)(多個(gè)網(wǎng)站),共享服務(wù)器的 IP 和端口資源,通過 server_name、IP、端口區(qū)分不同服務(wù)。

5.1 訪問狀態(tài)統(tǒng)計(jì)配置

Nginx 提供 ngx_http_stub_status_module 模塊,用于統(tǒng)計(jì) Nginx 的連接狀態(tài)(如活躍連接數(shù)、請求數(shù)),需在編譯時(shí)啟用(--with-http_stub_status_module)。

配置步驟:
  1. 編輯 nginx.conf 的 server 塊,添加 location 塊:

nginx

server {
    listen 80;
    server_name www.test.com;
    # 訪問狀態(tài)統(tǒng)計(jì)配置
    location /nginx_status {
        stub_status on;               # 開啟狀態(tài)統(tǒng)計(jì)
        allow 192.168.1.0/24;         # 允許訪問的IP網(wǎng)段(內(nèi)網(wǎng))
        deny all;                     # 拒絕其他所有IP訪問,保障安全
    }
}
  1. 驗(yàn)證配置并重載 Nginx:
nginx -t  # 檢查配置語法
nginx -s reload  # 重載配置
  1. 訪問測試:在允許的 IP 網(wǎng)段內(nèi),通過瀏覽器或 curl 訪問 http://www.test.com/nginx_status,輸出結(jié)果如下:

plaintext

Active connections: 2  # 當(dāng)前活躍連接數(shù)(包含等待連接)
server accepts handled requests
 100 100 200  # 累計(jì)接收連接數(shù)、累計(jì)處理連接數(shù)、累計(jì)請求數(shù)
Reading: 0 Writing: 1 Waiting: 1  # 正在讀取請求頭的連接數(shù)、正在寫入響應(yīng)的連接數(shù)、等待請求的連接數(shù)(長連接)

5.2 基于授權(quán)的訪問控制(HTTP 基本認(rèn)證)

通過用戶名 / 密碼驗(yàn)證客戶端身份,僅授權(quán)用戶可訪問網(wǎng)站,適用于后臺管理系統(tǒng)、內(nèi)部服務(wù)等場景。

配置步驟:
  1. 安裝 htpasswd 工具(用于生成密碼文件):
yum install -y httpd-tools  # CentOS/RHEL
apt install -y apache2-utils  # Ubuntu/Debian
  1. 生成密碼文件(用戶名:admin,密碼:123456):
htpasswd -c /usr/local/nginx/conf/.htpasswd admin
# 輸入密碼(123456),生成密碼文件 .htpasswd(隱藏文件,避免泄露)
  1. 編輯 Nginx 配置,添加授權(quán)控制:
server {
    listen 80;
    server_name admin.test.com;
    location / {
        root /usr/local/nginx/admin;  # 后臺管理系統(tǒng)根目錄
        index index.html;
        auth_basic "請輸入用戶名密碼";  # 認(rèn)證提示信息
        auth_basic_user_file /usr/local/nginx/conf/.htpasswd;  # 密碼文件路徑
    }
}
  1. 驗(yàn)證配置并重載 Nginx:
nginx -t && nginx -s reload
  1. 訪問測試:訪問 http://admin.test.com,瀏覽器會彈出登錄框,輸入正確的用戶名(admin)和密碼(123456)才能訪問,錯(cuò)誤則返回 401 Unauthorized。

5.3 基于客戶端的訪問控制(IP 黑白名單)

通過限制客戶端的 IP 地址,允許或拒絕特定 IP / 網(wǎng)段訪問,適用于防止惡意攻擊、僅允許內(nèi)網(wǎng)訪問等場景。Nginx 支持兩種配置方式:allow/deny 指令(簡單)和 ngx_http_limit_req_module 模塊(限流)。

5.3.1 allow/deny 指令(IP 黑白名單)
server {
    listen 80;
    server_name www.test.com;
    location / {
        root /usr/local/nginx/html;
        index index.html;
        # 允許的IP/網(wǎng)段(白名單)
        allow 192.168.1.100;  # 允許單個(gè)IP
        allow 192.168.1.0/24;  # 允許192.168.1.0網(wǎng)段
        allow 127.0.0.1;  # 允許本地訪問
        deny all;  # 拒絕其他所有IP(必須放在最后,順序影響結(jié)果)
    }
    # 僅拒絕特定IP(黑名單)
    location /api/ {
        deny 10.0.0.1;  # 拒絕10.0.0.1訪問
        deny 172.16.0.0/16;  # 拒絕172.16.0.0網(wǎng)段
        allow all;  # 允許其他所有IP
    }
}
  • 規(guī)則:allow 和 deny 按配置順序執(zhí)行,匹配到第一個(gè)規(guī)則后立即生效;
  • 適用場景:簡單的 IP 限制,如僅允許內(nèi)網(wǎng)訪問后臺服務(wù)。
5.3.2 基于訪問頻率的控制(限流)

通過 ngx_http_limit_req_module 模塊,限制單個(gè)客戶端的訪問頻率(如每秒最多 10 個(gè)請求),防止惡意請求壓垮服務(wù)器。

nginx

http {
    # 定義限流規(guī)則:以客戶端IP為key,緩存區(qū)大小10M,訪問頻率10r/s(每秒10個(gè)請求)
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    server {
        listen 80;
        server_name www.test.com;
        location / {
            limit_req zone=one burst=5 nodelay;  # 應(yīng)用限流規(guī)則
            # burst=5:允許突發(fā)5個(gè)請求(超過10r/s的部分,最多5個(gè)排隊(duì))
            # nodelay:突發(fā)請求不排隊(duì),直接返回503(避免客戶端等待)
            root /usr/local/nginx/html;
            index index.html;
        }
    }
}
  • 測試:通過 ab -n 100 -c 10 http://www.test.com/ 模擬高并發(fā)請求,超過頻率限制的請求會返回 503 Service Temporarily Unavailable。

5.4 基于域名的 Nginx 虛擬主機(jī)

核心原理:服務(wù)器綁定多個(gè)域名(如 www.test1.comwww.test2.com),所有域名解析到同一服務(wù)器 IP;Nginx 通過 server_name 匹配客戶端請求的 Host 頭,分發(fā)到對應(yīng)的虛擬主機(jī)。

配置步驟:
  1. 服務(wù)器綁定多個(gè)域名(需在 DNS 服務(wù)器配置解析,本地測試可修改 /etc/hosts):
# 本地測試:編輯 /etc/hosts,添加域名映射
echo "192.168.1.100 www.test1.com www.test2.com" >> /etc/hosts
  1. 準(zhǔn)備兩個(gè)網(wǎng)站的根目錄和測試頁面:
# 網(wǎng)站1:www.test1.com
mkdir -p /usr/local/nginx/html/test1
echo "<h1>Test1 Website</h1>" > /usr/local/nginx/html/test1/index.html
# 網(wǎng)站2:www.test2.com
mkdir -p /usr/local/nginx/html/test2
echo "<h1>Test2 Website</h1>" > /usr/local/nginx/html/test2/index.html
  1. 編輯 Nginx 配置,添加兩個(gè) server 塊:
# 虛擬主機(jī)1:www.test1.com
server {
    listen 80;
    server_name www.test1.com;
    location / {
        root /usr/local/nginx/html/test1;
        index index.html;
    }
}
# 虛擬主機(jī)2:www.test2.com
server {
    listen 80;
    server_name www.test2.com;
    location / {
        root /usr/local/nginx/html/test2;
        index index.html;
    }
}
  1. 驗(yàn)證配置并重載 Nginx:
nginx -t && nginx -s reload
  1. 訪問測試:
  • 訪問 http://www.test1.com,顯示 Test1 Website;
  • 訪問 http://www.test2.com,顯示 Test2 Website。

5.5 基于 IP 的 Nginx 虛擬主機(jī)

核心原理:服務(wù)器配置多個(gè) IP 地址(如 192.168.1.100192.168.1.101);Nginx 通過 listen 指令綁定不同的 IP,客戶端訪問不同的 IP 時(shí),匹配到對應(yīng)的虛擬主機(jī)。

配置步驟:
  1. 給服務(wù)器添加多個(gè) IP(以 CentOS 7 為例):
# 臨時(shí)添加IP(重啟網(wǎng)絡(luò)失效)
ifconfig ens33:1 192.168.1.101 netmask 255.255.255.0 up
# 永久添加IP:編輯網(wǎng)卡配置文件
cat > /etc/sysconfig/network-scripts/ifcfg-ens33:1 << EOF
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.1.101
NETMASK=255.255.255.0
DEVICE=ens33:1
ONBOOT=yes
EOF
# 重啟網(wǎng)絡(luò)
systemctl restart network
  1. 準(zhǔn)備兩個(gè)網(wǎng)站的根目錄(同 5.4 步驟 2);
  2. 編輯 Nginx 配置,listen 綁定不同 IP:

nginx

# 虛擬主機(jī)1:綁定192.168.1.100
server {
    listen 192.168.1.100:80;  # 綁定IP+端口
    server_name 192.168.1.100;
    location / {
        root /usr/local/nginx/html/test1;
        index index.html;
    }
}
# 虛擬主機(jī)2:綁定192.168.1.101
server {
    listen 192.168.1.101:80;
    server_name 192.168.1.101;
    location / {
        root /usr/local/nginx/html/test2;
        index index.html;
    }
}
  1. 驗(yàn)證配置并重載 Nginx;
  2. 訪問測試:
  • 訪問 http://192.168.1.100,顯示 Test1 Website;
  • 訪問 http://192.168.1.101,顯示 Test2 Website

5.6 基于端口的 Nginx 虛擬主機(jī)

核心原理:Nginx 的不同 server 塊監(jiān)聽不同的端口(如 80、8080、8888);客戶端通過 “IP + 端口” 訪問,Nginx 根據(jù)端口匹配對應(yīng)的虛擬主機(jī),是最簡單的虛擬主機(jī)配置方式。

配置步驟:
  1. 準(zhǔn)備兩個(gè)網(wǎng)站的根目錄(同 5.4 步驟 2);
  2. 編輯 Nginx 配置,listen 綁定不同端口:

nginx

# 虛擬主機(jī)1:監(jiān)聽80端口
server {
    listen 80;
    server_name 192.168.1.100;
    location / {
        root /usr/local/nginx/html/test1;
        index index.html;
    }
}
# 虛擬主機(jī)2:監(jiān)聽8080端口
server {
    listen 8080;
    server_name 192.168.1.100;
    location / {
        root /usr/local/nginx/html/test2;
        index index.html;
    }
}
  1. 開放端口(若防火墻開啟):
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
  1. 驗(yàn)證配置并重載 Nginx;
  2. 訪問測試:
  • 訪問 http://192.168.1.100:80,顯示 Test1 Website;
  • 訪問 http://192.168.1.100:8080,顯示 Test2 Website。

三種虛擬主機(jī)對比

類型核心區(qū)分依據(jù)適用場景優(yōu)點(diǎn)缺點(diǎn)
基于域名server_name(域名)多網(wǎng)站共享同一 IP + 端口(如共享 80/443),互聯(lián)網(wǎng)場景最常用用戶友好(無需記端口),節(jié)省 IP 資源需配置 DNS 解析,本地測試需修改 hosts
基于 IPlisten(綁定 IP)服務(wù)器有多個(gè) IP,需區(qū)分不同 IP 對應(yīng)的服務(wù)(如內(nèi)網(wǎng) / 外網(wǎng)服務(wù)分離)配置簡單,無需依賴 DNS浪費(fèi) IP 資源,IP 數(shù)量有限
基于端口listen(端口)測試環(huán)境、內(nèi)部服務(wù)(如后臺管理系統(tǒng)),無需域名解析配置最簡單,無需額外資源用戶需記端口(如 8080),不適合互聯(lián)網(wǎng)場

到此這篇關(guān)于Nginx概念、架構(gòu)、配置與虛擬主機(jī)實(shí)戰(zhàn)操作指南的文章就介紹到這了,更多相關(guān)nginx架構(gòu)與虛擬主機(jī)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx安裝時(shí)編譯不通過解決辦法

    Nginx安裝時(shí)編譯不通過解決辦法

    本文主要介紹了Nginx安裝時(shí)編譯不通過解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • Nginx解決跨域訪問的完整實(shí)例

    Nginx解決跨域訪問的完整實(shí)例

    本文介紹了使用Nginx解決Web開發(fā)中的跨域問題,并通過一個(gè)實(shí)例說明了配置和測試過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • nginx 虛擬主機(jī)設(shè)置實(shí)例(多網(wǎng)站配置)

    nginx 虛擬主機(jī)設(shè)置實(shí)例(多網(wǎng)站配置)

    Nginx 虛擬主機(jī)設(shè)置一例,主要是針對虛擬主機(jī)的設(shè)置,多網(wǎng)站配置方法,需要的朋友可以參考下
    2013-02-02
  • nginx反向代理配置去除前綴

    nginx反向代理配置去除前綴

    這篇文章主要介紹了nginx反向代理配置去除前綴的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Nginx+Tomcat搭建高性能負(fù)載均衡集群的實(shí)現(xiàn)方法

    Nginx+Tomcat搭建高性能負(fù)載均衡集群的實(shí)現(xiàn)方法

    這篇文章主要介紹了Nginx+Tomcat搭建高性能負(fù)載均衡集群的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Nginx服務(wù)器進(jìn)程數(shù)設(shè)置和利用多核CPU的方法

    Nginx服務(wù)器進(jìn)程數(shù)設(shè)置和利用多核CPU的方法

    這篇文章主要介紹了Nginx服務(wù)器進(jìn)程數(shù)設(shè)置和利用多核CPU的方法,這樣便可以更大限度地提高Nginx運(yùn)行效率,需要的朋友可以參考下
    2015-08-08
  • Nginx部署HTTP/3的實(shí)現(xiàn)步驟

    Nginx部署HTTP/3的實(shí)現(xiàn)步驟

    本文介紹了在Nginx中部署HTTP/3的詳細(xì)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • 利用njs模塊在nginx配置中引入js腳本

    利用njs模塊在nginx配置中引入js腳本

    這篇文章主要給大家介紹了關(guān)于利用njs模塊在nginx配置中引入js腳本的相關(guān)資料,通過這個(gè)腳本實(shí)現(xiàn)一些更復(fù)雜的?nginx?配置功能,需要的朋友可以參考下
    2021-12-12
  • nginx網(wǎng)站服務(wù)如何配置防盜鏈(推薦)

    nginx網(wǎng)站服務(wù)如何配置防盜鏈(推薦)

    這篇文章主要介紹了nginx網(wǎng)站服務(wù)如何配置防盜鏈,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Nginx部署Vue3項(xiàng)目完整指南

    Nginx部署Vue3項(xiàng)目完整指南

    本文檔介紹了使用Nginx部署Vue3單頁應(yīng)用,包括本地開發(fā)環(huán)境和服務(wù)端生產(chǎn)環(huán)境的配置差異, 文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03

最新評論

乃东县| 都江堰市| 巴林右旗| 怀宁县| 姚安县| 城市| 嘉峪关市| 贵港市| 太康县| 东乌| 寻甸| 多伦县| 新余市| 盐源县| 河北省| 湖口县| 遵义市| 都江堰市| 南开区| 闻喜县| 黎川县| 金堂县| 固原市| 贵州省| 彰化县| 都江堰市| 梓潼县| 安仁县| 绥芬河市| 临清市| 荔波县| 成武县| 古交市| 乐业县| 新巴尔虎左旗| 古田县| 文化| 新乡市| 河北省| 旌德县| 龙川县|