เวลาเปิดเว็บไซต์แล้วเห็นคำว่า Not Secure บน Browser นั่นคือสัญญาณว่าเว็บไซต์ยังไม่ได้ใช้งาน HTTPS หรือยังไม่มี SSL/TLS Certificate ที่ถูกต้อง ในงานจริงไม่ว่าจะเป็นเว็บองค์กร เว็บโรงเรียน ระบบภายใน หรือ API Server การเปิดใช้งาน HTTPS ถือเป็นพื้นฐานด้านความปลอดภัยที่ควรทำตั้งแต่วันแรก
บทความนี้จะพา Hands-on การตั้งค่า HTTPS บน Nginx โดยใช้ Certbot เพื่อขอ SSL/TLS Certificate จาก Let’s Encrypt และตั้งค่าให้เว็บไซต์เปลี่ยนจาก http:// เป็น https:// อย่างถูกต้อง
อ้างอิงแนวทางจากเอกสาร Ubuntu Server ที่แนะนำการติดตั้ง Nginx ด้วย apt และตรวจสอบบริการผ่าน systemctl รวมถึงเอกสาร Certbot ที่ระบุว่า Nginx plugin สามารถขอ Certificate และติดตั้งเข้ากับ Nginx ได้อัตโนมัติ
เป้าหมายของบทความนี้
หลังทำตามบทความนี้ ผู้อ่านจะสามารถทำสิ่งต่อไปนี้ได้
-
ติดตั้ง Nginx บน Ubuntu Server
-
สร้าง Virtual Host สำหรับเว็บไซต์
-
เปิด Firewall เฉพาะพอร์ตที่จำเป็น
-
ใช้ Certbot ขอ SSL/TLS Certificate
-
Redirect จาก HTTP ไป HTTPS
-
ตรวจสอบ Certificate และ Auto Renew
-
แก้ปัญหาเบื้องต้นเมื่อ HTTPS ใช้งานไม่ได้
สภาพแวดล้อมที่ใช้ทดสอบ
บทความนี้ทดสอบบนสภาพแวดล้อมดังนี้
-
OS: Ubuntu Server 26.04 LTS
-
Web Server: Nginx
-
SSL/TLS Certificate: Let’s Encrypt
-
Tool: Certbot
-
Domain ตัวอย่าง:
example.com
ในการใช้งานจริง ให้เปลี่ยน
example.comเป็นชื่อโดเมนของท่าน เช่นwww.sysadmin.in.th
ตรวจสอบเวอร์ชันระบบและ Nginx ได้ด้วยคำสั่ง
# ตรวจสอบเวอร์ชัน Ubuntu
lsb_release -a
# ตรวจสอบเวอร์ชัน Nginx
nginx -v
พื้นฐานที่จำเป็นก่อนเริ่ม
ก่อนตั้งค่า HTTPS ควรเตรียมสิ่งต่อไปนี้ให้พร้อม
-
มี Ubuntu Server ที่เชื่อมต่อ Internet ได้
-
มี Domain Name จริง เช่น
example.com -
DNS A Record ชี้มายัง Public IP ของ Server แล้ว
-
เปิดพอร์ต
80/tcpและ443/tcp -
มีสิทธิ์ใช้งานคำสั่ง
sudo
ตรวจสอบ IP ของ Server
# แสดง Public IP ของ Server
curl -4 ifconfig.me
ตรวจสอบว่า DNS ชี้มาถูก IP หรือไม่
# ตรวจสอบว่า domain ชี้มาที่ IP ใด
dig example.com +short
หากผลลัพธ์จาก dig ไม่ตรงกับ Public IP ของ Server ให้แก้ไข DNS ก่อน ไม่เช่นนั้น Certbot จะไม่สามารถยืนยันความเป็นเจ้าของโดเมนได้
ขั้นตอนที่ 1: ติดตั้ง Nginx
เริ่มจากอัปเดต Package Index และติดตั้ง Nginx
# อัปเดตรายการ package
sudo apt update
# ติดตั้ง Nginx
sudo apt install nginx -y
หลังติดตั้งแล้ว ตรวจสอบสถานะของ Nginx
# ตรวจสอบว่า Nginx ทำงานอยู่หรือไม่
sudo systemctl status nginx
หากทำงานปกติควรเห็นสถานะประมาณนี้
Active: active (running)
เปิด Browser แล้วเข้าไปที่
http://YOUR_SERVER_IP
ถ้าเห็นหน้า Welcome to nginx แสดงว่า Nginx พร้อมใช้งานแล้ว
แนะนำ Screenshot:
จับภาพหน้า Welcome to nginx เพื่อใช้ประกอบบทความช่วง “ติดตั้งสำเร็จ”
ขั้นตอนที่ 2: ตั้งค่า Firewall
ถ้าใช้ UFW ให้ตรวจสอบสถานะก่อน
# ตรวจสอบสถานะ Firewall
sudo ufw status
อนุญาตทราฟฟิก HTTP และ HTTPS
# เปิดใช้งานโปรไฟล์ Nginx Full ซึ่งครอบคลุมพอร์ต 80 และ 443
sudo ufw allow 'Nginx Full'
# ตรวจสอบสถานะอีกครั้ง
sudo ufw status
ตัวอย่างผลลัพธ์ที่ควรเห็น
Nginx Full ALLOW Anywhere
Nginx Full (v6) ALLOW Anywhere (v6)
⚠️ ข้อควรระวัง:
ไม่แนะนำให้ปิด Firewall ทั้งระบบเพื่อแก้ปัญหา HTTPS เพราะจะเพิ่มความเสี่ยงด้านความปลอดภัย ควรเปิดเฉพาะพอร์ตที่จำเป็น เช่น 22, 80, 443
ขั้นตอนที่ 3: สร้างโฟลเดอร์เว็บไซต์
สมมติว่าเราจะสร้างเว็บไซต์สำหรับโดเมน example.com
# สร้างโฟลเดอร์สำหรับเก็บไฟล์เว็บไซต์
sudo mkdir -p /var/www/example.com/html
# กำหนด owner ให้ผู้ใช้ปัจจุบันจัดการไฟล์ได้
sudo chown -R $USER:$USER /var/www/example.com/html
# กำหนด permission พื้นฐาน
sudo chmod -R 755 /var/www/example.com
สร้างไฟล์หน้าเว็บทดสอบ
# สร้างไฟล์ index.html
nano /var/www/example.com/html/index.html
ใส่เนื้อหาตัวอย่าง
<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8">
<title>Nginx HTTPS Test</title>
</head>
<body>
<h1>HTTPS บน Nginx พร้อมใช้งานแล้ว</h1>
<p>ทดสอบบน Ubuntu Server 26.04</p>
</body>
</html>
ขั้นตอนที่ 4: สร้าง Nginx Server Block
สร้างไฟล์ Configuration สำหรับเว็บไซต์
# สร้างไฟล์ server block
sudo nano /etc/nginx/sites-available/example.com
ใส่ค่าเบื้องต้นสำหรับ HTTP ก่อน
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}
เปิดใช้งาน Server Block ด้วย Symbolic Link
# เปิดใช้งาน site
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
# ตรวจสอบ syntax ของ Nginx
sudo nginx -t
# reload nginx โดยไม่หยุด service
sudo systemctl reload nginx
ทดสอบเข้าเว็บด้วย HTTP
http://example.com
หากแสดงหน้าเว็บที่สร้างไว้ แปลว่า Virtual Host ทำงานถูกต้อง
แนะนำ Screenshot:
จับภาพหน้าเว็บทดสอบผ่าน http://example.com ก่อนเปิด HTTPS
ขั้นตอนที่ 5: ติดตั้ง Certbot
Certbot แนะนำวิธีติดตั้งผ่าน Snap สำหรับระบบ Linux สมัยใหม่ และระบุว่า Snap ช่วยให้ได้ Certbot รุ่นใหม่พร้อมระบบต่ออายุ Certificate ที่ตั้งค่าไว้ล่วงหน้า
ติดตั้ง Snap และ Certbot
# ติดตั้ง snapd หากยังไม่มี
sudo apt install snapd -y
# อัปเดต core snap
sudo snap install core
sudo snap refresh core
# ติดตั้ง certbot
sudo snap install --classic certbot
# สร้าง symbolic link เพื่อเรียก certbot ได้สะดวก
sudo ln -s /snap/bin/certbot /usr/bin/certbot
ตรวจสอบเวอร์ชัน
# ตรวจสอบเวอร์ชัน Certbot
certbot --version
ขั้นตอนที่ 6: ขอ SSL/TLS Certificate ด้วย Certbot
ใช้ Certbot ร่วมกับ Nginx Plugin
# ขอ SSL Certificate และให้ Certbot ปรับค่า Nginx ให้อัตโนมัติ
sudo certbot --nginx -d example.com -d www.example.com
Certbot จะถามข้อมูลบางอย่าง เช่น
-
Email สำหรับแจ้งเตือนวันหมดอายุ
-
ยอมรับ Terms of Service
-
ต้องการ redirect HTTP ไป HTTPS หรือไม่
ให้เลือก Redirect เพื่อให้ผู้ใช้ที่เข้า http:// ถูกส่งไป https:// โดยอัตโนมัติ
เมื่อสำเร็จ จะเห็นข้อความประมาณนี้
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
Certbot จะเก็บ Certificate ไว้ใน /etc/letsencrypt/live/ และสามารถติดตั้งเข้ากับ Nginx ได้อัตโนมัติ ตามเอกสาร Certbot
ขั้นตอนที่ 7: ตรวจสอบไฟล์ Nginx หลังติดตั้ง HTTPS
หลังจาก Certbot ทำงานสำเร็จ ลองเปิดไฟล์เดิมอีกครั้ง
# เปิดไฟล์ config เพื่อตรวจสอบ
sudo nano /etc/nginx/sites-available/example.com
โดยทั่วไป Certbot จะเพิ่มส่วน HTTPS ให้ เช่น
server {
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}
หลักการสำคัญของ Nginx HTTPS คือใน server block ต้องมี listen 443 ssl; และระบุตำแหน่ง ssl_certificate กับ ssl_certificate_key ให้ถูกต้อง ตามเอกสาร Nginx
ขั้นตอนที่ 8: ทดสอบ HTTPS
ตรวจสอบ syntax ของ Nginx
# ตรวจสอบ configuration
sudo nginx -t
Reload Nginx
# reload nginx
sudo systemctl reload nginx
เปิด Browser แล้วเข้า
https://example.com
ควรเห็นรูปกุญแจหรือสัญลักษณ์ว่าเว็บไซต์ปลอดภัย
ตรวจสอบด้วย curl
# ตรวจสอบ HTTP header
curl -I https://example.com
หากเปิด redirect แล้ว ทดลองเรียก HTTP
# ตรวจสอบว่า HTTP redirect ไป HTTPS หรือไม่
curl -I http://example.com
ควรพบสถานะประมาณนี้
HTTP/1.1 301 Moved Permanently
Location: https://example.com/
แนะนำ Screenshot:
จับภาพ Browser ที่แสดงรูปกุญแจ HTTPS และหน้าเว็บที่เปิดผ่าน https://example.com
ขั้นตอนที่ 9: ตรวจสอบ Auto Renew
Let’s Encrypt Certificate มีอายุจำกัด จึงต้องมีระบบต่ออายุอัตโนมัติ Certbot ที่ติดตั้งผ่าน Snap จะตั้งค่าการต่ออายุไว้ให้แล้ว
ทดสอบการต่ออายุแบบจำลอง
# ทดสอบ renew โดยยังไม่ต่ออายุจริง
sudo certbot renew --dry-run
หากสำเร็จจะเห็นข้อความประมาณนี้
Congratulations, all simulated renewals succeeded
ตรวจสอบ Timer ของ Snap Certbot
# ตรวจสอบ systemd timer ที่เกี่ยวข้องกับ snap certbot
systemctl list-timers | grep certbot
ขั้นตอนที่ 10: เพิ่ม Security Header เบื้องต้น
สามารถเพิ่ม Security Header ใน HTTPS Server Block ได้ เช่น
server {
listen 443 ssl;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# ป้องกันการฝังเว็บใน iframe จาก domain อื่น
add_header X-Frame-Options "SAMEORIGIN" always;
# ลดความเสี่ยง MIME sniffing
add_header X-Content-Type-Options "nosniff" always;
# ควบคุมข้อมูล referrer ที่ส่งออกไป
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
location / {
try_files $uri $uri/ =404;
}
}
จากนั้นทดสอบและ reload
# ตรวจสอบ syntax
sudo nginx -t
# reload nginx
sudo systemctl reload nginx
การเปิด HSTS แบบระมัดระวัง
HSTS ช่วยบังคับให้ Browser เข้าเว็บไซต์ผ่าน HTTPS เสมอ แต่ควรใช้เมื่อมั่นใจว่า HTTPS ทำงานสมบูรณ์แล้ว
# เปิด HSTS หลังจากมั่นใจว่า HTTPS พร้อมใช้งานจริง
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
⚠️ ข้อควรระวัง:
หากเปิด HSTS แล้ว Certificate มีปัญหา ผู้ใช้อาจเข้าเว็บไม่ได้จนกว่าปัญหาจะถูกแก้ไข ดังนั้นไม่ควรเปิดทันทีในระบบที่ยังทดสอบไม่ครบ
ปัญหาที่พบบ่อย
1. Certbot ขอ Certificate ไม่ผ่าน
ตรวจสอบว่า DNS ชี้มาถูก IP หรือไม่
dig example.com +short
ตรวจสอบว่า Port 80 เปิดหรือไม่
sudo ufw status
ตรวจสอบว่า Nginx ทำงานอยู่หรือไม่
sudo systemctl status nginx
2. Nginx Reload ไม่ผ่าน
ตรวจสอบ syntax
sudo nginx -t
ดู Log เพิ่มเติม
sudo journalctl -xeu nginx
หรือดู Error Log ของเว็บไซต์
sudo tail -f /var/log/nginx/example.com.error.log
3. เข้า HTTPS แล้วขึ้น Certificate ไม่ตรงชื่อเว็บ
สาเหตุที่พบบ่อยคือ
-
ขอ Certificate ผิดโดเมน
-
ลืมใส่
www -
DNS ยังไม่ชี้มาที่ Server
-
มีหลาย Server Block ซ้อนกัน
ตรวจสอบ Server Block ทั้งหมด
# แสดงรายการไฟล์ site ที่เปิดใช้งาน
ls -l /etc/nginx/sites-enabled/
ตรวจสอบ configuration รวมของ Nginx
# แสดง config ทั้งหมด เหมาะสำหรับ debug
sudo nginx -T
4. เว็บเข้าได้เฉพาะ HTTP แต่ HTTPS เข้าไม่ได้
ตรวจสอบว่าเปิด Firewall สำหรับ HTTPS แล้วหรือยัง
sudo ufw allow 'Nginx Full'
sudo ufw status
ตรวจสอบว่า Nginx ฟังพอร์ต 443 หรือไม่
sudo ss -tulpn | grep ':443'
คำสั่งสรุปแบบรวบรัด
สำหรับผู้ที่ต้องการภาพรวม คำสั่งหลักมีดังนี้
# ติดตั้ง Nginx
sudo apt update
sudo apt install nginx -y
# เปิด Firewall สำหรับ HTTP/HTTPS
sudo ufw allow 'Nginx Full'
# ติดตั้ง Certbot ผ่าน Snap
sudo apt install snapd -y
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
# ขอ Certificate สำหรับ Nginx
sudo certbot --nginx -d example.com -d www.example.com
# ทดสอบ Auto Renew
sudo certbot renew --dry-run
สรุป
การตั้งค่า HTTPS บน Nginx ด้วย Certbot บน Ubuntu Server 26.04 ไม่ซับซ้อน หากเตรียม DNS, Firewall และ Nginx Server Block ให้ถูกต้องก่อน ขั้นตอนสำคัญคือให้โดเมนชี้มายัง Server จริง เปิดพอร์ต 80 และ 443 จากนั้นใช้ certbot --nginx เพื่อขอ SSL/TLS Certificate และติดตั้งเข้ากับ Nginx โดยอัตโนมัติ
หลังติดตั้งแล้วควรตรวจสอบทั้ง Browser, curl, Nginx Log และ Auto Renew เพื่อให้มั่นใจว่าเว็บไซต์ปลอดภัยและ Certificate จะต่ออายุได้เองในระยะยาว
—
Write by Dr.Arnut Ruttanatirakul
SysAdmin Knowledge
https://www.sysadmin.in.th
July 3, 2026
