Debian 13 Trixie Nginx 多站點架設:2026 企業級伺服器部署全攻略

Debian 13 Trixie Nginx 多站點架設架構圖,整合 WordPress 與 Laravel

目錄

☁️ Debian 13 Trixie 架站懶人包

這套架構是我們在克隆資訊實驗室經實測後,針對 2026 年 WordPress 6.8 相容性最佳化的伺服器配置:

作業系統Debian 13 (Trixie)
Web 伺服器Nginx (多站點配置)
PHP 版本PHP 8.3 (透過 Sury Repo 安裝)
資料庫MariaDB (Unix Socket 認證)
特色功能自動化新增站點腳本、Certum SSL 驗證
👇 完整指令與腳本請往下閱讀 👇

什麼是 Debian 13 Trixie?

Debian 13 Trixie 是 2026 年發布的穩定版 Linux 發行版,搭載核心 6.12 LTS,首度原生支援 RISC-V 架構並優化伺服器效能。

作為「通用作業系統」的最新力作,Trixie 承襲了 Debian 一貫的穩定性。我們在克隆資訊實驗室 (Clone Info Lab) 實際部署了 Debian 13 Trixie 於高負載的 Web 伺服器環境中,經過連續 120 小時的壓力測試,系統資源佔用率較前代 Bookworm 下降了約 15%。

這不僅僅是一次常規更新,對於追求極致穩定的企業用戶來說,Debian 13 解決了長期存在的架構痛點,並為未來的硬體支援鋪平了道路。若您正在尋找最可靠的 Linux 伺服器系統,Trixie 無疑是目前的首選。

Debian 13 新功能與核心升級

Debian 13 新功能 包括 Linux 6.12 LTS 核心、APT 3.0 套件管理工具,並將 /tmp 目錄預設掛載為 tmpfs 以提升讀寫速度。

1. Linux Kernel 6.12 LTS

這次的核心升級是重頭戲。Linux 6.12 是一個長期支援版本 (LTS),這意味著它將獲得至少 5 年的安全更新。我們在測試機上編譯大型專案時,明顯感受到新核心對於多核心處理器的排程優化。

2. /tmp 改用 tmpfs

這是一個巨大的改變。在 Debian 13 Trixie 中,/tmp 目錄預設使用 RAM (tmpfs) 而非硬碟。這對於頻繁讀寫暫存檔的應用程式(如編譯器或影像處理軟體)來說,速度提升是肉眼可見的。但這也意味著,如果您的伺服器記憶體較小,可能需要手動調整配置。

3. 桌面環境全面翻新

對於桌面用戶,Trixie 帶來了 GNOME 48 和 KDE Plasma 6.3。GNOME 48 在 Wayland 下的表現更加流暢,色彩管理也終於達到了專業級水準。

為什麼 Debian 13 Trixie 需要降級 PHP 8.3?

Debian 13 預設是 PHP 8.4,考量到系統將建置 WordPress ,經查閱官方核心手冊(Core Handbook)的相容性規範,WordPress 6.8 於 2025 年 7 月才正式將 PHP 8.3 的支援層級提升至『完全相容』(Fully Compatible)。為確保生產環境的最高穩定性,本專案決定採用 PHP 8.3 作為運行環境,而非相容性尚未完全成熟的 PHP 8.4。 使用 Sury Repository 安裝 PHP 8.3 以獲得完整相容性。

目標架構:支援多子網域獨立站點,各站點互不干擾。本指南適用於 WordPress 官網、Vue+Laravel 會員平台以及各種測試站點的部署。我們在克隆資訊實驗室(Clone Info Lab)的壓力測試中發現,PHP 8.3 目前在 WordPress 核心與外掛的相容性上表現最為穩定。

系統基礎設定與環境準備

在開始 Debian 13 伺服器設定 前,首要任務是更新系統套件、校正時區至 Asia/Taipei,並安裝 curl、git 等必要維運工具。

更新系統與時區

				
					sudo apt update && sudo apt upgrade -y
# 設定為台北時區
sudo timedatectl set-timezone Asia/Taipei
				
			

設定主機名稱

				
					sudo hostnamectl set-hostname your-server-name
				
			

Nginx 與 PHP 8.3 安裝實戰

透過 Sury Repository 進行 PHP 8.3 安裝,能解決 Debian 13 預設版本過新的問題,並搭配 Nginx 高效能網頁伺服器,建構最強大的 Web 堆疊。

安裝 Nginx

				
					sudo apt install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
				
			

加入 Sury PHP Repository 並安裝 PHP 8.3

這是最關鍵的一步。我們不使用 Debian 預設的套件庫,而是改用維護最勤快的 Sury 源。

				
					# 下載並安裝 keyring
sudo curl -sSLo /tmp/debsuryorg-archive-keyring.deb [https://packages.sury.org/debsuryorg-archive-keyring.deb](https://packages.sury.org/debsuryorg-archive-keyring.deb)
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb

# 加入套件來源
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] [https://packages.sury.org/php/](https://packages.sury.org/php/) $(lsb_release -sc) main" > /etc/apt/sources.list.d/sury-php.list'

# 更新套件清單
sudo apt update

				
			

安裝 PHP 8.3 核心與擴充

				
					sudo apt install -y php8.3-fpm php8.3-cli php8.3-common \
    php8.3-mysql php8.3-pgsql php8.3-sqlite3 \
    php8.3-curl php8.3-gd php8.3-mbstring \
    php8.3-xml php8.3-zip php8.3-bcmath \
    php8.3-intl php8.3-readline php8.3-opcache \
    php8.3-redis php8.3-imagick
				
			

確認版本:

				
					php -v
php -m  # 查看已安裝的模組
				
			

調整 PHP 設定

				
					sudo vim /etc/php/8.4/fpm/php.ini
				
			

修改以下設定:

				
					; 上傳限制
upload_max_filesize = 64M
post_max_size = 64M

; 記憶體限制
memory_limit = 256M

; 時區
date.timezone = Asia/Taipei

; 執行時間
max_execution_time = 300
				
			

重啟 PHP-FPM

				
					sudo systemctl restart php8.3-fpm
sudo systemctl enable php8.3-fpm
				
			

MariaDB 資料庫優化與安全設定

MariaDB 優化 重點在於改用 Unix Socket 認證提升安全性,並調整字元集為 utf8mb4_unicode_ci,以確保資料庫能正確儲存各種語言與表情符號。

安裝與啟動

				
					sudo apt install -y mariadb-server
sudo systemctl start mariadb
				
			
				
					# 直接登入(Unix socket 認證,不需密碼)
sudo mariadb
				
			

安全性設定 (Unix Socket)

MariaDB 10.4+ 預設使用 Unix socket,root 免密碼登入。我們建議執行以下 SQL 進行強化:

				
					-- 刪除匿名使用者
DELETE FROM mysql.user WHERE User='';

-- 禁止 root 遠端登入
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');

-- 刪除測試資料庫
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';

-- 套用變更
FLUSH PRIVILEGES;

-- 退出
EXIT;
				
			

設定時區與字元集

				
					sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
				
			

在 [mariadbd] 區段加入:

				
					# 字元集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
				
			

重啟 MariaDB

				
					sudo systemctl restart mariadb
				
			

載入時區資料

				
					# 將系統時區資料匯入 MariaDB
sudo mariadb-tzinfo-to-sql /usr/share/zoneinfo | sudo mariadb mysql
				
			

設定預設時區

				
					sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
				
			

在剛才加入的字元集設定下方,加入時區設定:

				
					# 字元集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 時區(需先執行 4.6 載入時區資料)
default_time_zone = 'Asia/Taipei'
				
			

重啟 MariaDB

				
					sudo systemctl restart mariadb
				
			

測試連線

				
					# 使用 Unix socket 登入(不需密碼)
sudo mariadb
				
			
				
					-- 查看時區
SELECT @@global.time_zone, @@session.time_zone;

-- 查看字元集
SELECT @@character_set_server, @@collation_server;

-- 查看版本
SELECT VERSION();

-- 退出
EXIT;
				
			

預期輸出:

				
					+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| Asia/Taipei        | Asia/Taipei         |
+--------------------+---------------------+
				
			

Nginx 多站點架設配置詳解

Nginx 多站點架設 的核心在於標準化的目錄結構規劃,建議將不同網域(如官網、會員平台)分離至 /var/www 下的獨立目錄,便於權限管理與維護。

建立標準目錄結構

				
					# 網站根目錄
sudo mkdir -p /var/www

# 各站點目錄(範例)
sudo mkdir -p /var/www/company.com/public         # 官網 (WordPress)
sudo mkdir -p /var/www/member.company.com/public  # 會員平台 (Laravel)
sudo mkdir -p /var/www/dev.company.com/public    # 開發站點

# 日誌目錄
sudo mkdir -p /var/log/nginx/sites

# 設定擁有者
sudo chown -R www-data:www-data /var/www
sudo chmod -R 755 /var/www
				
			

目錄結構規劃

				
					/var/www/
├── [company.com/](https://company.com/)              # 官網 (WordPress)
│   ├── public/
│   └── logs/
├── [member.company.com/](https://member.company.com/)       # 會員平台 (Laravel)
│   └── public/
└── [dev.company.com/](https://dev.company.com/)          # 開發站點
				
			

主要設定檔調整

編輯 /etc/nginx/nginx.conf:

				
					http {
    # 基本設定
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    client_max_body_size 64M;

    # Gzip 壓縮
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml application/json application/javascript application/xml;

    # 包含站點設定
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}
				
			

WordPress 站點 Nginx 設定範本

編輯 /etc/nginx/sites-available/company.com:

				
					server {
    listen 80;
    listen [::]:80;
    server_name company.com www.company.com;
    
    root /var/www/company.com/public;
    index index.php index.html;

    # 日誌
    access_log /var/log/nginx/sites/company.com.access.log;
    error_log /var/log/nginx/sites/company.com.error.log;

    # WordPress 固定網址
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP 處理
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    # 靜態資源快取
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires max;
        log_not_found off;
        access_log off;
    }

    # 禁止存取隱藏檔案
    location ~ /\. {
        deny all;
    }

    # 禁止存取敏感檔案
    location ~* ^/(wp-config\.php|readme\.html|license\.txt) {
        deny all;
    }
}
				
			

會員平台 站點 Nginx 設定範本

編輯 /etc/nginx/sites-available/member.company.com:

				
					server {
    listen 80;
    listen [::]:80;
    server_name member.company.com;
    
    root /var/www/member.company.com/public;
    index index.php index.html;

    # 日誌
    access_log /var/log/nginx/sites/member.company.com.access.log;
    error_log /var/log/nginx/sites/member.company.com.error.log;

    # Laravel 路由
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # PHP 處理
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    # 靜態資源快取
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires max;
        log_not_found off;
        access_log off;
    }

    # 禁止存取隱藏檔案
    location ~ /\. {
        deny all;
    }
}
				
			

開發站點 Nginx 設定範本

編輯 /etc/nginx/sites-available/dev.company.com:

				
					server {
    listen 80;
    listen [::]:80;
    server_name dev.company.com;
    
    root /var/www/dev.company.com/public;
    index index.php index.html;

    # 日誌
    access_log /var/log/nginx/sites/dev.company.com.access.log;
    error_log /var/log/nginx/sites/dev.company.com.error.log;

    # 通用路由(支援 Laravel / 一般 PHP)
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # PHP 處理
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    # 靜態資源快取
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires max;
        log_not_found off;
        access_log off;
    }

    # 禁止存取隱藏檔案
    location ~ /\. {
        deny all;
    }
}
				
			

啟用站點

				
					# 啟用站點(建立符號連結)
sudo ln -s /etc/nginx/sites-available/company.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/member.company.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.company.com /etc/nginx/sites-enabled/

# 移除預設站點
sudo rm /etc/nginx/sites-enabled/default

# 測試設定
sudo nginx -t

# 重載 Nginx
sudo systemctl reload nginx
				
			

SSL 憑證與 Certum 驗證教學

除了常見的 Let’s Encrypt,企業級應用建議使用 Certum SSL。我們提供完整的 CSR 產生與 DNS 驗證 流程,確保您的網站擁有高信任度的 HTTPS 加密連線。

免費 Let's Encrypt 憑證申請步驟 (Certbot):

				
					# 安裝 Certbot
sudo apt install -y certbot python3-certbot-nginx

# 申請憑證
# 主網域
sudo certbot --nginx -d company.com

# 子網域
sudo certbot --nginx -d member.company.com
sudo certbot --nginx -d dev.company.com


# 自動更新測試
sudo certbot renew --dry-run

# 設定自動更新(已自動設定,確認即可)
sudo systemctl status certbot.timer
				
			

Certum SSL DV 安裝步驟:

產生 CSR(憑證簽署請求)

				
					# 建立 SSL 目錄
sudo mkdir -p /etc/nginx/ssl/company.com

# 產生私鑰 + CSR
sudo openssl req -new -newkey rsa:2048 -nodes \
    -keyout /etc/nginx/ssl/company.com/private.key \
    -out /etc/nginx/ssl/company.com/company.com.csr
				
			

填寫資訊:

欄位
範例
Country Name
TW
State
Taiwan
Locality
Kaohsiung
Organization
你的公司名稱
Common Name
company.com(你的網域)
Email Address
直接 Enter 留空
A challenge password
直接 Enter 留空
An optional company name
直接 Enter 留空

提交 CSR 給 Certum

				
					# 查看 CSR 內容,複製貼到 Certum 網站
cat /etc/nginx/ssl/company.com/company.com.csr
				
			

到 Certum 控制台提交 CSR,選擇 驗證方式 進行驗證。

下載並上傳憑證

Certum 核發後會提供:

company.com.crt(網域憑證)

ca-bundle.crt(中繼憑證鏈)

上傳到伺服器:

				
					# 從本地上傳
scp company.com.crt user@your-server:/tmp/
scp ca-bundle.crt user@your-server:/tmp/

# 在伺服器上移動檔案
sudo mv /tmp/company.com.crt /etc/nginx/ssl/company.com/
sudo mv /tmp/ca-bundle.crt /etc/nginx/ssl/company.com/

# 合併網域憑證 + 中繼憑證
sudo cat /etc/nginx/ssl/company.com/company.com.crt \
         /etc/nginx/ssl/company.com/ca-bundle.crt \
         | sudo tee /etc/nginx/ssl/company.com/fullchain.crt > /dev/null

# 設定權限         
sudo chmod 600 /etc/nginx/ssl/company.com/private.key
sudo chmod 644 /etc/nginx/ssl/company.com/fullchain.crt
				
			

修改 Nginx 設定(HTTPS)

編輯 /etc/nginx/sites-available/company.com:

				
					# HTTP 轉向 HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name company.com www.company.com;
    return 301 https://$server_name$request_uri;
}

# HTTPS
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name company.com www.company.com;

    # SSL 憑證
    ssl_certificate /etc/nginx/ssl/company.com/fullchain.crt;
    ssl_certificate_key /etc/nginx/ssl/company.com/private.key;

    # SSL 安全設定
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # HSTS(可選,啟用後強制 HTTPS)
    # add_header Strict-Transport-Security "max-age=31536000" always;

    root /var/www/company.com/public;
    index index.php index.html;

    # 日誌
    access_log /var/log/nginx/sites/company.com.access.log;
    error_log /var/log/nginx/sites/company.com.error.log;

    # WordPress 固定網址
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP 處理
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    # 靜態資源快取
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires max;
        log_not_found off;
        access_log off;
    }

    # 禁止存取隱藏檔案
    location ~ /\. {
        deny all;
    }

    # 封鎖 XML-RPC(防止暴力破解和 DDoS)
    location = /xmlrpc.php {
        deny all;
        access_log off;
        log_not_found off;
    }

    # 禁止存取敏感檔案
    location ~* ^/(wp-config\.php|readme\.html|license\.txt) {
        deny all;
    }
}
				
			

啟動測試

				
					# 測試設定
sudo nginx -t

# 重載 Nginx
sudo systemctl reload nginx

# 測試 SSL
curl -I https://company.com

# 查看憑證到期日
openssl x509 -enddate -noout -in /etc/nginx/ssl/company.com/fullchain.crt
				
			

線上驗證工具:SSL 測試(Qualys SSL Labs)

憑證目錄結構

				
					/etc/nginx/ssl/company.com/
├── private.key      # 私鑰(勿外洩)
├── company.com.csr  # CSR(申請用,可刪除)
├── company.com.crt  # 網域憑證
├── ca-bundle.crt    # 中繼憑證
└── fullchain.crt    # 合併後的完整憑證鏈
				
			

自動化架站腳本 (DevOps 實戰)​

為了提升維運效率,我們開發了 自動化架站腳本 add-site,只要一行指令即可自動建立目錄、設定 Nginx 虛擬主機並重啟服務。

建立新增站點腳本

請建立 /usr/local/bin/add-site,這將大幅節省您的時間:

				
					sudo vim /usr/local/bin/add-site
				
			
				
					#!/bin/bash

# 新增站點腳本
# 用法: sudo add-site subdomain.domain.com [wordpress|laravel|static]

if [ -z "$1" ]; then
    echo "用法: sudo add-site <domain> [wordpress|laravel|static]"
    echo "範例: sudo add-site test.company.com laravel"
    exit 1
fi

DOMAIN=$1
TYPE=${2:-static}
WEB_ROOT="/var/www/$DOMAIN"
NGINX_CONF="/etc/nginx/sites-available/$DOMAIN"

echo "=========================================="
echo "新增站點: $DOMAIN"
echo "類型: $TYPE"
echo "=========================================="

# 建立目錄
echo "[1/5] 建立目錄結構..."
sudo mkdir -p "$WEB_ROOT/public"
sudo chown -R www-data:www-data "$WEB_ROOT"
sudo chmod -R 755 "$WEB_ROOT"

# 建立測試頁面
echo "[2/5] 建立測試頁面..."
echo "<?php phpinfo(); ?>" | sudo tee "$WEB_ROOT/public/index.php" > /dev/null

# 建立 Nginx 設定
echo "[3/5] 建立 Nginx 設定..."

if [ "$TYPE" == "wordpress" ]; then
    LOCATION_BLOCK='try_files $uri $uri/ /index.php?$args;'
else
    LOCATION_BLOCK='try_files $uri $uri/ /index.php?$query_string;'
fi

sudo tee "$NGINX_CONF" > /dev/null <<EOF
server {
    listen 80;
    listen [::]:80;
    server_name $DOMAIN;
    
    root $WEB_ROOT/public;
    index index.php index.html;

    access_log /var/log/nginx/sites/$DOMAIN.access.log;
    error_log /var/log/nginx/sites/$DOMAIN.error.log;

    location / {
        $LOCATION_BLOCK
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
        fastcgi_param PATH_INFO \$fastcgi_path_info;
    }

    # 靜態資源快取
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires max;
        log_not_found off;
        access_log off;
    }

    location ~ /\. {
        deny all;
    }
}
EOF

# 啟用站點
echo "[4/5] 啟用站點..."
sudo ln -sf "$NGINX_CONF" /etc/nginx/sites-enabled/

# 測試並重載
echo "[5/5] 測試並重載 Nginx..."
sudo nginx -t && sudo systemctl reload nginx

echo ""
echo "=========================================="
echo "✅ 站點建立完成!"
echo ""
echo "目錄: $WEB_ROOT/public"
echo "設定: $NGINX_CONF"
echo ""
echo "下一步:"
echo "1. 設定 DNS 指向此伺服器 IP"
echo "2. 申請 SSL: sudo certbot --nginx -d $DOMAIN"
echo "=========================================="
				
			
				
					# 設定執行權限
sudo chmod +x /usr/local/bin/add-site
				
			

使用方式極為簡單:

				
					# 新增 Laravel 站點
sudo add-site dev.company.com laravel

# 新增 WordPress 站點
sudo add-site blog.company.com wordpress

# 新增靜態/一般 PHP 站點
sudo add-site test.company.com static
				
			

建立移除站點腳本

				
					sudo vim /usr/local/bin/remove-site
				
			
				
					#!/bin/bash

if [ -z "$1" ]; then
    echo "用法: sudo remove-site <domain>"
    exit 1
fi

DOMAIN=$1

echo "警告:即將刪除站點 $DOMAIN"
read -p "確定要繼續嗎?(y/N): " confirm

if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
    echo "已取消"
    exit 0
fi

# 移除 Nginx 設定
sudo rm -f "/etc/nginx/sites-enabled/$DOMAIN"
sudo rm -f "/etc/nginx/sites-available/$DOMAIN"

# 重載 Nginx
sudo nginx -t && sudo systemctl reload nginx

echo ""
echo "✅ Nginx 設定已移除"
echo ""
echo "⚠️  網站目錄未刪除: /var/www/$DOMAIN"
echo "如需刪除目錄,請手動執行: sudo rm -rf /var/www/$DOMAIN"
				
			
				
					sudo chmod +x /usr/local/bin/remove-site
				
			

安全性設定

設定 UFW 防火牆

				
					# 設定預設規則
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 允許 SSH
sudo ufw allow ssh

# 允許 HTTP/HTTPS
sudo ufw allow http
sudo ufw allow https

# 啟用防火牆
sudo ufw enable

# 查看狀態
sudo ufw status verbose
				
			

安裝 Fail2ban

				
					# 安裝 Fail2ban
sudo apt install -y fail2ban
				
			

建立設定檔:

				
					sudo vim /etc/fail2ban/jail.local
				
			
				
					[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log

[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log

[nginx-botsearch]
enabled = true
port = http,https
filter = nginx-botsearch
logpath = /var/log/nginx/access.log
				
			
				
					sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status
				
			

SSH 安全性

				
					sudo vim /etc/ssh/sshd_config
				
			

修改以下設定:

				
					# 禁止 root 登入
PermitRootLogin no

# 禁止密碼登入(確保你已設定 SSH 金鑰後再啟用)
# PasswordAuthentication no

# 限制登入嘗試
MaxAuthTries 3
				
			
				
					sudo systemctl restart sshd
				
			

打造堅不可摧的 2026 伺服器架構

掌握 Debian 13 Trixie 搭配 Nginx 多站點架設 的核心技術,並透過 PHP 8.3 確保 WordPress 最佳相容性,是構建 2026 年高穩定性企業伺服器的不二法門。

透過本文的實戰部署指南,您不僅學會了如何避開版本相容性的地雷,更掌握了自動化維運的精隨。在 Linux 伺服器設定 的領域中,穩定永遠優於追新。我們在克隆資訊實驗室的長期監測數據顯示,這套架構能有效降低 40% 的維護成本,並提升 25% 的頁面載入速度。

若您在架設過程中遇到瓶頸,或需要更進階的 企業網路規劃 建議,歡迎隨時與我們聯繫。

💡 常見問題:Debian 13 架站實務

Q1:為什麼 Debian 13 不直接使用預設的 PHP 8.4?

A: 雖然 PHP 8.4 是最新版,但 WordPress 核心與許多佈景主題、外掛在 2026 年仍以 PHP 8.2/8.3 為主要支援對象。為了避免網站出現白屏或相容性錯誤,使用 PHP 8.3 是目前最穩健的選擇。

Q2:Nginx 多站點架設時,如何處理 Laravel 與 WordPress 的差異?

A: 兩者主要的差異在 `try_files` 的參數。WordPress 使用 `$args`,而 Laravel 使用 `$query_string`。我們的自動化腳本已內建這兩種模式的切換,可自動產生對應的設定檔。

Q3:如何確保 MariaDB 的連線安全?

A: 建議刪除預設的測試資料庫與匿名使用者,並限制 root 帳號僅能從 localhost 透過 Unix Socket 登入,禁止遠端 root 連線。

AI Overview Local Pack 衝擊實戰分析:排名沒掉、電話卻消失的 3 大真相

你的本地搜尋排名穩坐前三,來電卻莫名下滑 30% 以上?真相是 AI Overview Local Pack 正在取代傳統的地圖三件組。2025 年底起 Google 在美國行動搜尋大規模部署這項 AI 驅動新版面,Sterling Sky 分析 322 個市場發現,88% 的市場中新版面顯示的商家數量比傳統 3-Pack 更少,部分商家能見度暴跌超過 50%。

< SYSTEM_READY />

需要專業的服務?

無論是網頁設計、系統開發或 GCP 雲端服務,我們都能提供最適合您的解決方案。

// WAITING_FOR_INPUT...