Nginx是一款高性能的Web服務器和反向代理服務器,它的配置文件是管理網站和服務的核心。對於新手來說,理解配置文件中的Server塊和location是入門的關鍵。

Nginx配置文件的基本結構

Nginx的主配置文件(通常是nginx.conf)由多個“塊”組成,就像一個層級分明的配置樹。最外層的塊可以分爲:

  • 全局塊:影響整個Nginx服務的基礎配置,比如worker_processes(工作進程數,建議設爲CPU核心數)、error_log(錯誤日誌路徑)等。
  • events塊:定義網絡連接相關的設置,比如worker_connections(每個工作進程的最大連接數)。
  • http塊:包含多個Server塊,定義HTTP服務器的整體特性,比如keepalive_timeout(長連接超時時間)、gzip壓縮等。

每個塊用大括號{}包裹,內部是具體指令,指令以分號;結尾。

Server塊:虛擬主機的核心

Server塊用於定義“虛擬主機”,即不同網站的獨立配置。一臺服務器可以通過不同域名或端口運行多個網站,每個網站對應一個Server塊。

Server塊基本結構示例:

server {
    listen 80;                  # 監聽80端口(HTTP默認端口)
    server_name example.com;    # 匹配域名(如example.com或www.example.com)
    root /var/www/example;      # 網站文件根目錄(請求路徑從這裏查找文件)
    index index.html;           # 默認首頁(找不到具體文件時返回該頁面)
}

關鍵指令說明:

  • listen:指定Nginx監聽的端口(如listen 8080監聽8080端口)。
  • server_name:匹配域名或IP,多個域名用空格分隔(如server_name a.com b.com)。
  • root:網站文件的根目錄,請求路徑會拼接在root後(如訪問/會找/var/www/example/index.html)。
  • index:指定默認首頁,按順序嘗試(如先找index.html,再找index.php)。

location塊:按路徑分配請求

location塊用於根據請求的URL路徑,決定如何處理請求(如返回靜態文件、轉發動態請求)。

常見location匹配類型:

  1. 前綴匹配location /static/ 匹配所有以/static/開頭的路徑,優先級低於精確匹配。
   location /static/ {
       root /var/www/static;    # 靜態文件放在/var/www/static下
       expires 7d;              # 瀏覽器緩存7天(減少重複請求)
   }

此時訪問example.com/static/image.jpg,會返回/var/www/static/image.jpg

  1. 精確匹配location = / 僅匹配根路徑/,優先級最高。
   location = / {
       root /var/www/example;
       index index.html;  # 根路徑直接返回首頁
   }
  1. 正則匹配:用~(區分大小寫)或~*(不區分大小寫)匹配路徑,常用於匹配文件後綴。
   location ~* \.(jpg|png|gif)$ {  # 匹配所有圖片文件(不區分大小寫)
       root /var/www/images;
       expires 30d;  # 圖片緩存30天
   }
  1. API/動態請求匹配location /api/ 匹配所有以/api/開頭的路徑,用於轉發給後端服務(如Node.js、Java)。
   location /api/ {
       proxy_pass http://127.0.0.1:3000;  # 轉發到後端API服務
       proxy_set_header Host $host;       # 傳遞原域名
   }

location匹配優先級:

精確匹配(=) > 帶^~的前綴匹配(如location ^~ /static/) > 普通前綴匹配(/static/) > 正則匹配(~) > 默認匹配(/

綜合配置示例

以下是一個完整的Server塊+location塊配置,包含靜態文件、動態請求和API轉發:

server {
    listen 80;
    server_name example.com;
    root /var/www/example;
    index index.html index.php;

    # 1. 靜態文件處理(CSS、JS、圖片)
    location /static/ {
        root /var/www/static;
        expires 7d;  # 靜態文件緩存7天
    }

    # 2. 圖片文件單獨處理(正則匹配)
    location ~* \.(jpg|png|gif)$ {
        root /var/www/images;
        expires 30d;
    }

    # 3. 動態請求(PHP/後端服務)
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;  # 轉發給PHP-FPM服務(默認9000端口)
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;        # 引入FastCGI參數(如PATH_INFO等)
    }

    # 4. 單頁應用(SPA)路由
    location / {
        try_files $uri $uri/ /index.html;  # 找不到文件時返回index.html
    }
}

配置驗證與生效

修改配置後,需驗證並重啓Nginx:
1. 檢查配置語法nginx -t(Nginx會輸出配置是否有誤)。
2. 重載配置nginx -s reload(無需停止服務,直接生效新配置)。
3. 重啓服務nginx -s stop(先停止)或nginx -s quit(優雅停止)後nginx啓動。

總結

Nginx配置的核心是Server塊(定義網站)和location塊(按路徑分配請求)。新手可先掌握基礎配置:監聽端口、域名、靜態文件路徑,再逐步學習動態請求轉發、緩存等高級功能。通過實際配置和測試,能更快理解兩者的配合邏輯。

小夜