Skip to content

建立 2026-09-15 更新 2026-09-15

靜態網站與 Server Block

server block(有些文件稱為 virtual host)是 Nginx 用來定義「一個網站」的基本單位。一份 Nginx 設定裡可以有多個 server block,各自綁定不同的網域或連接埠,讓一台主機同時服務多個網站。

基本寫法

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html;
}
  • listen:監聽的連接埠,80 是預設的 HTTP 埠。
  • server_name:這個 block 要回應的網域名稱,可以寫多個,用空白分隔。
  • root:靜態檔案所在的資料夾。
  • index:使用者只輸入資料夾路徑(例如 /)時,預設回傳的檔名。

rootalias 的差異

兩者都是用來指定檔案位置,但路徑組合方式不同,是新手很容易搞混的地方:

# root:完整路徑 = root + location 的路徑
location /images/ {
    root /var/www;              # 實際會找 /var/www/images/檔名
}

# alias:完整路徑 = alias 取代掉 location 的路徑
location /images/ {
    alias /var/www/static/;     # 實際會找 /var/www/static/檔名
}

簡單記法:root 是「加上去」,alias 是「換掉」。

try_files 與自訂錯誤頁

try_files 依序嘗試多個路徑,常用來處理前端 SPA 或找不到檔案時的備援:

location / {
    try_files $uri $uri/ /index.html;
}

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;

上面的設定會先找完全符合的檔案,找不到再試資料夾,最後才回傳 index.html(常見於前端框架的路由需求)。

同時架設多個網站

只要用不同的 server_name 各寫一個 server block,同一台主機、同一個連接埠就能服務多個網域,這稱為 name-based virtual hosting:

server {
    listen 80;
    server_name shop.example.com;
    root /var/www/shop;
}

server {
    listen 80;
    server_name blog.example.com;
    root /var/www/blog;
}

Nginx 會依照 HTTP 請求標頭中的 Host 決定要交給哪一個 server block 處理。實務上通常會把每個網站的設定拆成獨立檔案,放在 sites-available/,再透過符號連結啟用到 sites-enabled/(見 安裝與啟動),方便個別管理與除錯。