n8n Thai
by n8n Thai

ตั้งค่า SSL และ Domain สำหรับ n8n

คู่มือตั้งค่า SSL certificate และ custom domain สำหรับ n8n self-hosted ด้วย Nginx reverse proxy และ Let's Encrypt

ตั้งค่า SSL และ Domain สำหรับ n8n

การรัน n8n ด้วย HTTPS และ custom domain เป็นสิ่งจำเป็นสำหรับ production เพราะ Webhook ของหลายบริการเช่น LINE, Shopee, และ Stripe ต้องการ HTTPS เท่านั้น คู่มือนี้จะพาคุณตั้งค่าตั้งแต่ต้นจนจบ

บทความนี้สมมติว่าคุณมี n8n รันอยู่บน VPS (Ubuntu/Debian) แล้ว ถ้ายังไม่ได้ติดตั้ง ดูก่อนได้ที่ ติดตั้ง n8n ด้วย Docker หรือ คู่มือ Self-Host n8n ฉบับสมบูรณ์

สิ่งที่ต้องเตรียม

  • VPS ที่รัน n8n อยู่แล้วบน port 5678
  • Domain name ที่ชี้มายัง IP ของ VPS แล้ว (A record)
  • Ubuntu 20.04/22.04 หรือ Debian 11/12
  • สิทธิ์ root หรือ sudo

ตรวจสอบว่า domain ชี้มายัง VPS ถูกต้องแล้ว:

dig +short your-domain.com
# ควรแสดง IP ของ VPS คุณ

ขั้นตอนที่ 1: ติดตั้ง Nginx

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

ตรวจสอบว่า Nginx รันอยู่:

sudo systemctl status nginx

ขั้นตอนที่ 2: ติดตั้ง Certbot

Certbot คือ tool สำหรับออกและต่ออายุ SSL certificate จาก Let’s Encrypt โดยอัตโนมัติ

sudo apt install -y certbot python3-certbot-nginx

ขั้นตอนที่ 3: สร้าง Nginx Config สำหรับ n8n

สร้างไฟล์ config ใหม่สำหรับ domain ของคุณ:

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

วางเนื้อหานี้ลงไป (แทนที่ your-domain.com ด้วย domain จริงของคุณ):

server {
    listen 80;
    server_name your-domain.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;
        proxy_cache_bypass $http_upgrade;
        
        # Timeout settings สำหรับ long-running workflows
        proxy_read_timeout 300s;
        proxy_connect_timeout 75s;
    }
}

เปิดใช้งาน config:

sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

ขั้นตอนที่ 4: ออก SSL Certificate

sudo certbot --nginx -d your-domain.com

Certbot จะถามข้อมูลบางอย่าง:

  1. Email address — สำหรับรับแจ้งเตือนเมื่อ cert ใกล้หมดอายุ
  2. Agree to terms — พิมพ์ Y
  3. Share email with EFF — พิมพ์ N ได้
  4. Redirect HTTP to HTTPS — เลือก 2 เพื่อ redirect อัตโนมัติ

Certbot จะแก้ไข Nginx config ให้อัตโนมัติและ reload

ขั้นตอนที่ 5: ตั้งค่า n8n ให้รู้จัก URL ใหม่

n8n ต้องรู้ว่าตัวเองทำงานอยู่บน domain อะไรเพื่อสร้าง Webhook URL ที่ถูกต้อง

เปิดไฟล์ .env หรือ docker-compose.yml ของ n8n แล้วเพิ่ม:

WEBHOOK_URL=https://your-domain.com
N8N_PROTOCOL=https
N8N_HOST=your-domain.com

จากนั้น restart n8n:

# สำหรับ Docker
docker restart n8n

# สำหรับ Docker Compose
docker compose restart n8n

ขั้นตอนที่ 6: ตรวจสอบ SSL

เปิดเบราว์เซอร์แล้วเข้า https://your-domain.com ควรเห็น:

  • ไอคอนแม่กุญแจสีเขียว (หรือสีเทา) ในแถบ address
  • n8n login page โหลดขึ้นมาปกติ

ตรวจสอบ certificate เพิ่มเติมด้วย:

sudo certbot certificates

SSL certificate จาก Let’s Encrypt มีอายุ 90 วัน Certbot จะต่ออายุให้อัตโนมัติผ่าน cron job ที่ติดตั้งมาพร้อมกัน

ตั้งค่า Firewall

เปิด port ที่จำเป็นและปิด port 5678 จากภายนอก:

sudo ufw allow 22/tcp    # SSH
sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS
sudo ufw deny 5678/tcp   # ปิด n8n direct access จากภายนอก
sudo ufw enable

หลังจากนี้ n8n จะเข้าถึงได้ผ่าน HTTPS เท่านั้น ไม่สามารถเข้าถึง port 5678 โดยตรงจากภายนอกได้

แก้ปัญหาที่พบบ่อย

Certbot ออก certificate ไม่ได้: “Could not bind to IPv4”

sudo systemctl stop nginx
sudo certbot certonly --standalone -d your-domain.com
sudo systemctl start nginx

Webhook URL ไม่ถูกต้องใน n8n

ตรวจสอบว่าตั้งค่า WEBHOOK_URL ใน environment ของ n8n เป็น https://your-domain.com (ไม่มี trailing slash) แล้ว restart n8n ใหม่

502 Bad Gateway

แสดงว่า Nginx ติดต่อกับ n8n ไม่ได้ ตรวจสอบว่า n8n รันอยู่:

docker ps | grep n8n
curl http://localhost:5678

อยากเรียน n8n แบบเป็นระบบ ตั้งแต่เริ่มต้นจนสร้าง Workflow ใช้งานจริงได้ ลองดู คอร์สสอน n8n ที่ aiunlock.co

Related posts