n8n HTTPS Nginx SSL Let's Encrypt 反向代理

n8n HTTPS 設定教學:Nginx 反向代理 + SSL 憑證一次搞定

教你用 Nginx 反向代理幫 n8n 加上 HTTPS。從 Nginx 安裝到 Let's Encrypt SSL 憑證申請,附完整設定檔和 Cloudflare 替代方案。

N8NMarket 2026年3月23日 8 分鐘閱讀

n8n HTTPS 設定教學:Nginx 反向代理 + SSL 憑證一次搞定

n8n 裝好之後,如果你要放到正式網域上(不是 localhost),就需要加 HTTPS。這篇教你用 Nginx + Let’s Encrypt 搞定,附完整設定檔可以直接複製。


為什麼需要 HTTPS?

三個理由,都很實際:

  1. Webhook 要 HTTPS 才能用 — Gmail、Slack、LINE 這些服務只接受 HTTPS 的 Webhook 網址。沒有 HTTPS,你的觸發器收不到資料
  2. 帳號密碼不能裸奔 — 沒有 HTTPS,你登入 n8n 的帳號密碼會在網路上明文傳送
  3. 瀏覽器會擋你 — Chrome 對 HTTP 網站會顯示「不安全」警告

白話版:HTTPS 就是幫你的 n8n 加密碼鎖,外面的人看不到你在傳什麼。


事前準備

在開始之前,你需要:

項目說明
一台 VPS已經跑著 n8n(照 Docker 安裝教學 裝好的)
一個網域例如 n8n.yourdomain.com
DNS 設定把網域的 A 記錄指到你的 VPS IP

還沒裝 n8n?先看 n8n Docker 安裝教學。不想自己裝?一鍵部署也可以


Step 1:安裝 Nginx 和 Certbot

sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx

裝完確認 Nginx 有跑起來:

sudo systemctl status nginx

看到 active (running) 就對了。


Step 2:設定 Nginx 反向代理

白話版:反向代理就是 Nginx 站在 n8n 前面,外面的人先到 Nginx,Nginx 再幫忙轉給後面的 n8n。好處是 HTTPS 交給 Nginx 處理,n8n 本身不用管。

2.1 建立 Nginx 設定檔

sudo nano /etc/nginx/sites-available/n8n

貼上以下內容(把 n8n.yourdomain.com 換成你的網域):

server {
    listen 80;
    server_name n8n.yourdomain.com;

    location / {
        proxy_pass http://localhost:5678;
        proxy_http_version 1.1;

        # WebSocket 支援(n8n 編輯器需要)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 傳遞真實 IP
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 防止大檔案上傳被擋
        client_max_body_size 50M;

        # 長時間執行的 workflow 不被斷線
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }
}

2.2 啟用設定

# 建立捷徑
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/

# 測試設定有沒有寫錯
sudo nginx -t

# 重新載入 Nginx
sudo systemctl reload nginx

nginx -t 顯示 syntax is ok 就沒問題。


Step 3:申請 Let’s Encrypt SSL 憑證

Let’s Encrypt 是免費的 SSL 憑證,Certbot 會幫你自動申請和設定。

sudo certbot --nginx -d n8n.yourdomain.com

Certbot 會問你幾個問題:

  1. Email — 填你的 email(憑證快過期會通知你)
  2. 同意條款 — 按 Y
  3. 要不要把 HTTP 轉到 HTTPS — 選 2: Redirect(建議)

完成後 Certbot 會自動修改你的 Nginx 設定檔,加上 SSL 的部分。

確認憑證有裝好

打開瀏覽器,輸入 https://n8n.yourdomain.com,看到 n8n 登入畫面 + 網址列有鎖頭圖示,就成功了。

自動續約

Let’s Encrypt 的憑證 90 天到期,但 Certbot 裝好後會自動設定續約。確認一下:

sudo certbot renew --dry-run

沒有錯誤就表示自動續約有設定好。


Step 4:更新 n8n 環境變數

HTTPS 設好之後,要告訴 n8n「你現在是用 HTTPS 了」。

打開你的 .env 檔:

# .env

# 改這三行
N8N_PROTOCOL=https
N8N_HOST=n8n.yourdomain.com
WEBHOOK_URL=https://n8n.yourdomain.com/

# 加這行(告訴 n8n 前面有一層代理)
N8N_PROXY_HOPS=1

改完之後重啟 n8n:

docker compose down && docker compose up -d

Step 5:驗證一切正常

5.1 測試網頁

打開 https://n8n.yourdomain.com,確認可以正常登入和操作。

5.2 測試 Webhook

在 n8n 裡面建一個簡單的 Webhook 節點,看看產生的 URL 是不是 https:// 開頭的。如果還是 http://,檢查你的 WEBHOOK_URL 環境變數有沒有設對。

5.3 測試 SSL 憑證

SSL Labs 輸入你的網域,看看評分。正常應該是 A 或 A+。


替代方案:用 Cloudflare 搞定 HTTPS

如果你不想碰 Nginx 和 Certbot,Cloudflare 提供另一種方式:

方法 A:Cloudflare Proxy(最簡單)

  1. 把你的網域 DNS 管理移到 Cloudflare
  2. 加一筆 A 記錄指到你的 VPS,開啟橘色雲朵(Proxy)
  3. SSL/TLS 設定選「Full」
  4. 這樣流量就會經過 Cloudflare → 自動有 HTTPS

好處:不用裝 Nginx、不用裝 Certbot、設定最少。

方法 B:Cloudflare Tunnel(更安全)

  1. 在 VPS 上安裝 cloudflared
  2. 建立 Tunnel 連到你的 n8n(port 5678)
  3. 在 Cloudflare Dashboard 設定 Tunnel 路由

好處:VPS 不用開放任何 port,連防火牆都不用設。

Cloudflare Tunnel 的詳細教學可以看 Cloudflare 官方文件


完整的 Nginx 設定檔(Certbot 處理完的樣子)

給你參考 Certbot 自動處理完後,完整的設定檔長這樣:

server {
    server_name n8n.yourdomain.com;

    location / {
        proxy_pass http://localhost:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 50M;
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }

    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/n8n.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/n8n.yourdomain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

server {
    if ($host = n8n.yourdomain.com) {
        return 301 https://$host$request_uri;
    }

    listen 80;
    server_name n8n.yourdomain.com;
    return 404;
}

常見錯誤

❌ 502 Bad Gateway

Nginx 連不到 n8n。檢查 n8n 有沒有在跑:

docker compose ps

如果 n8n 容器沒在跑,重啟它:

docker compose up -d

❌ Webhook URL 還是 http://

確認 .env 裡面 WEBHOOK_URLhttps:// 開頭,然後重啟 n8n。

❌ Certbot 申請失敗

常見原因:

  • DNS 的 A 記錄還沒生效(等幾分鐘再試)
  • 防火牆擋了 80 port(Certbot 需要 80 port 驗證)
# 確認防火牆開了 80 和 443
sudo ufw allow 80
sudo ufw allow 443

❌ WebSocket connection failed

n8n 編輯器用 WebSocket,如果 Nginx 設定少了 UpgradeConnection headers,編輯器會連不上。確認你的設定檔有這兩行:

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

下一步

HTTPS 搞定之後:


不想自己搞 HTTPS?

SSL 憑證、Nginx 設定、防火牆… 搞這些的時間拿去做自動化不是更好嗎?

我們幫你架好,HTTPS 都設好了 >> n8nstart.cc/hosting


本文最後更新:2026-03-21 有問題?到 n8n 官方社群N8NMarket 粉專 問我們。