跳转到帖子
在手机APP中查看

一个更好的浏览方法。了解更多

PHP论坛人

主屏幕上的全屏APP,带有推送通知、徽章等。

在iOS和iPadOS上安装此APP
  1. 在Safari中轻敲分享图标
  2. 滚动菜单并轻敲添加到主屏幕
  3. 轻敲右上角的添加按钮。
在安卓上安装此APP
  1. 轻敲浏览器右上角的三个点菜单 (⋮) 。
  2. 轻敲添加到主屏幕安装APP
  3. 轻敲安装进行确认。

Debian 13 安裝Nginx官方版本、更改主機名稱、虛擬主機設定

精选回复

Debian 13 安裝Nginx官方版本、更改主機名稱、虛擬主機設定

--------
前言
--------

本教學適用Debian 13,假設系統尚未安裝Nginx,改用Nginx官方來源進行安裝與基本設定


為什麼選擇Nginx官方版本?

Debian內建的nginx套件版本通常較舊,而官方版本提供:

最新穩定版:取得Nginx官方釋出的當下最新穩定版本

官方維護:由Nginx團隊直接維護與提供安全性更新

生產環境首選:適合需要快速獲得上游更新與修補的正式環境




------------
注意事項
------------


目錄結構差異

官方版與Debian版在目錄結構上略有不同。官方版預設沒有 sites-available 與 sites-enabled 這兩個用於管理虛擬主機的目錄

本教學將手動建立並整合它們,讓管理方式更直覺




使用者與群組變更

為符合Debian系統習慣與相容性,所有Nginx程序與目錄權限將統一使用 www-data:www-data (Debian預設的Web使用者)








----------------------------------
準備工作 (更新系統、安裝工具)
----------------------------------


更新系統套件並安裝必要的工具

apt update

apt upgrade -y


安裝後續步驟所需的工具
apt install -y curl vim wget gnupg  gnupg2 dpkg apt-transport-https lsb-release ca-certificates



匯入Nginx官方GPG金鑰
此步驟讓系統信任Nginx官方套件來源,確保安裝的套件未遭竄改
curl -fsSL https://nginx.org/keys/nginx_signing.key | gpg --dearmor -o /usr/share/keyrings/nginx.gpg



確認金鑰檔案已正確建立
應顯示檔案存在,大小約數KB
ls -lh /usr/share/keyrings/nginx.gpg




加入Nginx官方APT來源列表

將Nginx官方伺服器加入系統來源 (自動偵測系統架構與版本代號)

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/nginx.gpg] https://nginx.org/packages/debian/ $(lsb_release -sc) nginx" > /etc/apt/sources.list.d/nginx.list




檢查來源設定是否正確
cat /etc/apt/sources.list.d/nginx.list


應顯示類似:deb [arch=amd64 signed-by=/usr/share/keyrings/nginx.gpg] https://nginx.org/packages/debian/ trixie nginx



更新套件列表並安裝Nginx
apt update


apt install -y nginx


安裝完成後,確認版本
nginx -v


應顯示類似 nginx version: nginx/1.28.x 的訊息




----------------------------------
更改系統主機名稱 (Hostname)
----------------------------------

若希望主機名稱與網站域名一致,可執行

hostnamectl set-hostname 域名.com



登出再登入即可生效


登出SSH
exit




重新登入SSH


應顯示為  Linux 域名.com 6.12.63+deb13-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.63-1 (2025-12-30) x86_64



確認主機名稱已更改
hostname




-----------------------
同步更新 /etc/hosts
-----------------------

更改主機名稱為純本機設定,與DNS解析無關,不影響網站是否可以對外存取

若系統同時使用 /etc/hosts,建議也同步更新其中的對應設定

編輯
vi /etc/hosts


找到原本的主機名稱那行 (通常格式為 127.0.1.1  舊主機名稱),將名稱改為新域名

127.0.1.1   域名.com


這樣可避免部分程式無法解析主機名稱的警告


儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter



--------------------------------------------------
修改Nginx執行使用者為 www-data
--------------------------------------------------

Nginx官方版預設以 nginx 使用者執行,Debian套件則使用 www-data

為與Debian習慣一致,並避免日後與PHP-FPM等服務的權限衝突,建議統一改為 www-data


編輯
vi /etc/nginx/nginx.conf


找到最頂端的 user nginx; (通常是第一行或第二行),將其改為

user  www-data;



儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter


儲存後測試
nginx -t




說明:

若未修改此設定,Nginx worker process 將以 nginx 使用者身份執行

而網站目錄擁有者為 www-data,兩者不符將導致 403 Forbidden 錯誤


--------------------------------------
關閉Nginx官方預設 default.conf
--------------------------------------

官方版預設啟用 /etc/nginx/conf.d/default.conf,這會與你自訂的 80 port 設定衝突


建議停用
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled









-------------------------------------------------
建立 Nginx 虛擬主機 (Server Block) 管理結構
-------------------------------------------------


Nginx官方版不含 Debian風格的虛擬主機管理目錄 (sites-available / sites-enabled),需手動建立





---------------------------------------------
建立 sites-available 與 sites-enabled 目錄
---------------------------------------------

mkdir -p /etc/nginx/sites-available

mkdir -p /etc/nginx/sites-enabled


說明:-p 參數允許建立多層目錄,若目錄已存在也不會報錯



--------------------------------------
修改主設定檔,載入 sites-enabled
--------------------------------------

編輯
vi /etc/nginx/nginx.conf


在 http { ... } 區塊的結尾附近,可放在最後一個 } 之前,加入以下這行


include /etc/nginx/sites-enabled/*.conf;


儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter


請確認是加在 http { } 區塊內部,而非區塊外面

因為Nginx官方版不包含此設定,必須手動加入,否則虛擬主機設定檔不會被載入,網站將無法正常運作


測試
nginx -t




------------------
建立網站根目錄
------------------

建立網站根目錄

mkdir -p /var/www/域名.com





-----------------------
建立虛擬主機設定檔
-----------------------

建立 域名.com.conf

vi /etc/nginx/sites-available/域名.com.conf



貼上以下內容  (請將 域名.com 替換為你的實際域名)


server {
        listen 80;
        server_name 域名.com;
        root /var/www/域名.com;
        index index.html index.htm;

        location / {
                try_files $uri $uri/ =404;
        }

      # 記錄存取與錯誤日誌 (便於除錯)
      access_log /var/log/nginx/域名.com.access.log;
      error_log  /var/log/nginx/域名.com.error.log;
  }


儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter


說明:

access_log 與 error_log 雖非必要,但強烈建議加入,便於後續排查問題

若有多個網站,每個網站各自建立一個 .conf 檔案,清楚分離設定,方便維護與停用個別網站





--------------------------
啟用網站 (建立軟連結)
--------------------------

ln -s /etc/nginx/sites-available/域名.com.conf /etc/nginx/sites-enabled/域名.com.conf




說明:

使用軟連結 (symlink) 的好處是:日後若要暫時關閉網站,只需刪除 sites-enabled 中的連結,設定檔仍會保留在 sites-available 中,方便日後重新啟用


日後若要暫時關閉網站,只需 rm 刪除 sites-enabled 中的連結
rm /etc/nginx/sites-enabled/域名.com.conf



--------------------------------------------------
修正網站目錄與檔案權限 (避免 403 Forbidden)
--------------------------------------------------

將網站目錄與檔案擁有者改為 www-data (與 nginx.conf 的 user 設定一致)

chown -R www-data:www-data /var/www/域名.com

chmod -R 755 /var/www/域名.com



啟動
systemctl start nginx


確認
ps aux | grep nginx | grep -v grep


應看到 worker process 的左側顯示為 www-data







說明:

如果未來上傳PHP或其他動態網站,可能需要根據實際需求調整權限 (例如將某些目錄設為 775)

755 是一個安全且通用的起始設定

確認 nginx.conf 中的 user 已設為 www-data,否則即使目錄權限正確,Nginx仍可能因使用者不符而產生 403 錯誤







-------------------------
測試與重新載入Nginx
-------------------------

每次修改設定後,務必先測試設定語法是否正確

nginx -t

若顯示
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

代表設定無誤,即可繼續



重新載入設定
systemctl reload nginx



說明:

請使用 reload (重新載入設定),而非 restart (重新啟動服務)

reload不會中斷現有連線;restart會短暫中斷所有服務,在生產環境中應盡量避免

若 nginx -t 顯示錯誤,Nginx 會指出是哪個檔案的哪一行有問題,根據提示修正後再次執行 nginx -t 確認,通過後再 reload




----------------
建立測試頁面
----------------

在網站目錄中,新增一個index.html

vi /var/www/網域.com/index.html


貼上以下內容

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>測試頁面</title>
</head>
<body>
<h1>Nginx 運作正常</h1>
<p>若你看到此頁面,代表 Nginx 已成功安裝並正確設定。</p>
</body>
</html>


儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter





-----------------------------------
防火牆設定 (開放 80 / 443 Port)
-----------------------------------

之前的步驟已啟用iptables防火牆,需開放 HTTP 80 與 HTTPS 443 連接埠

編輯防火牆腳本
vi /usr/local/bin/firewall.sh


# 3. 允許對內連線的 TCP 通訊埠(支援來源 IP 限制與反向排除)
IN_TCP_PORTALLOWED="22,你的管理員IPv4 80 443"


儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter


重新套用防火牆規則
bash /usr/local/bin/firewall.sh


檢查規則是否生效
iptables -L INPUT -n --line-numbers | grep -E "80|443"


應顯示為
29   WEB_ACCEPT  tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 ctstate NEW
30   WEB_ACCEPT  tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443 ctstate NEW




重要:

若使用雲端服務商 (如 GCP、AWS、Azure),除了系統內的 iptables,還需在雲端控制台的「安全性群組」或「防火牆規則」中開放 80/443 連接埠,兩者都需要設定,缺一不可

日後若要安裝SSL憑證,443 連接埠必須事先開放,否則申請憑證的驗證流程會失敗



---------------------------------
啟動Nginx並設定開機啟動
---------------------------------

啟動Nginx
systemctl start nginx


開機自動啟動
systemctl enable nginx


檢查服務狀態
systemctl status nginx


正常應顯示 Active: active (running)



若服務無法啟動,查看錯誤
journalctl -xeu nginx


常見問題:設定檔語法錯誤、連接埠被其他服務佔用 (可用 ss -tlnp | grep :80 確認)








---------------------
驗證網站是否正常
---------------------

開啟瀏覽器,輸入

http://域名.com/index.html

應可看到剛才建立的測試頁面





在伺服器本機用 curl 測試 (不依賴DNS解析)

curl -I http://localhost/


應回傳 HTTP/1.1 200 OK



若域名尚未設定DNS解析,可直接使用IP測試

http://你的伺服器IP/


說明:
DNS解析通常需要 24〜48 小時才能完全生效。在此期間,可先透過IP確認Nginx是否正常回應,待DNS生效後再測試域名




-------------------------------------------------
設定 logrotate 自動輪替日誌 (避免日誌爆滿)
-------------------------------------------------

為避免 Nginx 的存取日誌 (access log) 和錯誤日誌 (error log) 無限增長,耗盡硬碟空間,需設定 logrotate 自動管理


確認 logrotate 設定是否存在
cat /etc/logrotate.d/nginx


如果此檔案不存在,可以建立一個新的設定檔


編輯
vi /etc/logrotate.d/nginx


貼上以下內容

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 www-data adm
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}



儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter



說明:
這會讓系統每天輪替一次日誌,保留 14 天的紀錄,並壓縮舊檔




手動測試 logrotate 是否設定正確 (不實際輪替,僅模擬)
logrotate -d /etc/logrotate.d/nginx




------------------
重開機再次驗證
------------------

重開機再次驗證 服務狀態
systemctl status nginx


正常應顯示 Active: active (running)



測試設定語法是否正確
nginx -t








-------------
補充
-------------

sites-enabled 載入
官方版 Nginx 預設不載入,務必手動加入 include



www-data 權限
若未設定目錄擁有者,容易出現 403 Forbidden



nginx -t
每次修改設定後都應測試,避免設定錯誤導致服務中斷



reload vs restart
生產環境應使用 reload 保留現有連線



防火牆雙層檢查
系統 + 雲端防火牆都要開放 80/443



Port被佔用
查找
ss -tlnp | grep :80





Hash Bucket Size:若你的域名非常長,啟動Nginx時可能會報錯 server_names_hash_bucket_size

此時需在 nginx.conf 的 http 區塊中取消該行註解並調大數值 (如 64)

編輯 nginx.conf
vi /etc/nginx/nginx.conf

在 http {} 區塊裡面加入或取消註解

http {
    .........
    server_names_hash_bucket_size 64;
    .........
}


儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter



注意:
必須放在 http {} 區塊中

不可以放在 server {} 裡面

不要重複定義多次

一般網站	建議數值 64

長子網域	建議數值 128

大量 vhost	建議數值 128 ~ 256

不建議無限放大,因為這會增加記憶體使用量

创建帐户或登录后发表意见

帐户

导航

搜索

配置浏览器推送通知

Chrome (安卓)
  1. 轻敲地址栏旁的锁形图标。
  2. 轻敲权限 → 通知。
  3. 调整你的偏好。
Chrome (台式电脑)
  1. 点击地址栏中的挂锁图标。
  2. 选择网站设置。
  3. 找到通知选项并调整你的偏好。