
LEMP Stack คือชุดซอฟต์แวร์ที่นักพัฒนาเว็บและผู้ดูแลระบบใช้รันเว็บไซต์บน VPS Linux มาอย่างยาวนาน ย่อมาจาก Linux, Enginx (ออกเสียงว่า "engine-x"), MySQL และ PHP รวมกันเป็นแพลตฟอร์มที่แข็งแกร่ง รองรับเว็บตั้งแต่ Blog ส่วนตัวไปจนถึง E-Commerce ที่รับ Traffic หนักได้
บทความนี้จะพาคุณติดตั้ง LEMP Stack บน Ubuntu 22.04 LTS บน VPS ทีละขั้นตอน ไม่ว่าจะเป็น VPS ของ AsiaGB หรือผู้ให้บริการอื่น สามารถใช้คู่มือนี้ได้เลย
สารบัญ
- LEMP Stack คืออะไร และทำไมต้องใช้ Nginx?
- สิ่งที่ต้องเตรียมก่อนติดตั้ง
- อัพเดตระบบและติดตั้ง Package
- ติดตั้งและตั้งค่า Nginx
- ติดตั้ง MySQL และ Secure Installation
- ติดตั้ง PHP และ PHP-FPM
- เชื่อม Nginx กับ PHP-FPM
- ตั้งค่า Server Block (Virtual Host)
- ทดสอบ PHP ทำงานบน Nginx
- ติดตั้ง SSL ด้วย Let's Encrypt
- เทคนิค Optimize Performance
- แก้ปัญหาที่พบบ่อย
- คำถามที่พบบ่อย (FAQ)
1. LEMP Stack คืออะไร และทำไมต้องใช้ Nginx?
LEMP Stack เป็นทางเลือกยอดนิยมแทน LAMP Stack (Linux + Apache + MySQL + PHP) โดยจุดแตกต่างหลักอยู่ที่ Web Server ที่ใช้ Nginx แทน Apache:
| หัวข้อ | Nginx (LEMP) | Apache (LAMP) |
|---|---|---|
| การจัดการ Connection | Event-driven, Non-blocking | Process/Thread per Request |
| การใช้ RAM | น้อยกว่า เมื่อ Traffic สูง | มากกว่า ตาม Connection ที่เพิ่ม |
| Static File | เร็วมาก | ปานกลาง |
| PHP Handler | ผ่าน PHP-FPM (แยก Process) | mod_php (ในตัว Apache) |
| เหมาะกับ | VPS สเปกต่ำ-กลาง, Traffic สูง | เซิร์ฟเวอร์ที่ใช้ .htaccess มาก |
สรุปคือ Nginx เหมาะกับ VPS ที่ต้องการประสิทธิภาพสูงด้วยทรัพยากรที่จำกัด ซึ่งเป็นสถานการณ์ปกติของผู้ใช้ VPS ทั่วไป
2. สิ่งที่ต้องเตรียมก่อนติดตั้ง
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมีสิ่งต่อไปนี้พร้อม:
- VPS ที่รัน Ubuntu 22.04 LTS (หรือ 20.04 LTS) พร้อม Root/Sudo Access
- IP Address ของ VPS และ Domain Name ที่ชี้ A Record มายัง IP นั้นแล้ว
- SSH Client เช่น Terminal (macOS/Linux) หรือ PuTTY (Windows)
- RAM ขั้นต่ำ 1 GB (แนะนำ 2 GB สำหรับ WordPress)
หมายเหตุ: VPS Linux ของ AsiaGB รองรับ Ubuntu 22.04 LTS ทุกแพ็กเกจ เริ่มต้น 500 บาท/เดือน มี Full Root Access พร้อมใช้ ติดตั้ง LEMP Stack ได้ทันทีหลังได้รับ Credential
3. อัพเดตระบบและติดตั้ง Package
ขั้นแรก SSH เข้า VPS และอัพเดต Package List ให้เป็นปัจจุบัน:
sudo apt update && sudo apt upgrade -y
รอให้การอัพเดตเสร็จสมบูรณ์ อาจใช้เวลา 2-5 นาทีขึ้นอยู่กับจำนวน Package ที่ต้องอัพเดต หากได้รับ Prompt ถามเกี่ยวกับ Kernel หรือ Service ให้เลือก "Keep the local version currently installed" หรือกด Enter เพื่อใช้ค่าเริ่มต้น
4. ติดตั้งและตั้งค่า Nginx
ติดตั้ง Nginx ด้วย apt Package Manager:
sudo apt install nginx -y
หลังติดตั้งเสร็จ เปิดใช้งานและสั่ง Start Nginx:
sudo systemctl enable nginx sudo systemctl start nginx sudo systemctl status nginx
ถ้า Status แสดง active (running) แสดงว่า Nginx ทำงานแล้ว เปิด Browser แล้วพิมพ์ IP ของ VPS จะเห็นหน้า "Welcome to nginx!"
ตั้งค่า Firewall (UFW)
เปิด Port ที่จำเป็นด้วย UFW:
sudo ufw allow OpenSSH sudo ufw allow 'Nginx Full' sudo ufw enable sudo ufw status
⚠️ สำคัญ: ต้อง allow OpenSSH ก่อนเปิด UFW เสมอ มิฉะนั้นคุณจะถูก Lock ออกจาก VPS ทันที ถ้าเกิดปัญหาให้เข้าผ่าน Console ของผู้ให้บริการ VPS
5. ติดตั้ง MySQL และ Secure Installation
ติดตั้ง MySQL Server:
sudo apt install mysql-server -y
หลังติดตั้ง รัน Secure Installation Script เพื่อเพิ่มความปลอดภัย:
sudo mysql_secure_installation
Script จะถามคำถามต่อไปนี้:
- Validate Password Plugin: กด
Yแนะนำให้เปิดเพื่อบังคับ Password แข็งแกร่ง - Password Strength: เลือก
2(Strong) สำหรับ Production - Remove Anonymous Users: กด
Y(สำคัญ) - Disallow Root Login Remotely: กด
Y(สำคัญ) - Remove Test Database: กด
Y - Reload Privilege Tables: กด
Y
สร้าง Database User สำหรับเว็บ
Login เข้า MySQL และสร้าง User แยกสำหรับแต่ละเว็บ (ไม่ใช้ root):
sudo mysql -- สร้าง Database CREATE DATABASE mywebsite CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- สร้าง User CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'รหัสผ่านแข็งแกร่ง'; -- ให้สิทธิ์ GRANT ALL PRIVILEGES ON mywebsite.* TO 'webuser'@'localhost'; FLUSH PRIVILEGES; EXIT;
6. ติดตั้ง PHP และ PHP-FPM
Ubuntu 22.04 มี PHP 8.1 ใน Repository เริ่มต้น ติดตั้งพร้อม Extensions ที่จำเป็น:
sudo apt install php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd \ php8.1-mbstring php8.1-xml php8.1-zip php8.1-bcmath \ php8.1-imagick php8.1-intl -y
ตรวจสอบสถานะ PHP-FPM:
sudo systemctl status php8.1-fpm
ต้องแสดง active (running) ถ้าไม่ทำงานให้รัน sudo systemctl start php8.1-fpm
ปรับค่า PHP Configuration (php.ini)
แก้ไขค่าพื้นฐานใน php.ini สำหรับ FPM:
sudo nano /etc/php/8.1/fpm/php.ini
ค้นหาและแก้ไขค่าต่อไปนี้:
upload_max_filesize = 64M post_max_size = 64M max_execution_time = 300 memory_limit = 256M max_input_vars = 3000
บันทึกและ Restart PHP-FPM:
sudo systemctl restart php8.1-fpm
7. เชื่อม Nginx กับ PHP-FPM
แก้ไข Default Server Block ของ Nginx หรือสร้างใหม่ ไฟล์อยู่ที่ /etc/nginx/sites-available/default:
sudo nano /etc/nginx/sites-available/default
เพิ่มส่วน PHP location block:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}ทดสอบ Config และ Reload Nginx:
sudo nginx -t sudo systemctl reload nginx
8. ตั้งค่า Server Block (Virtual Host) สำหรับ Domain
ถ้ามีหลาย Domain บน VPS เดียวกัน สร้าง Server Block แยกสำหรับแต่ละ Domain:
sudo mkdir -p /var/www/example.com/public_html sudo chown -R $USER:www-data /var/www/example.com sudo chmod -R 755 /var/www/example.com
สร้าง Config ใหม่:
sudo nano /etc/nginx/sites-available/example.com
ใส่เนื้อหา:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
index index.php index.html;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}เปิดใช้งาน Site และ Reload:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
9. ทดสอบ PHP ทำงานบน Nginx
สร้างไฟล์ทดสอบ phpinfo():
echo "" | sudo tee /var/www/html/phpinfo.php
เปิด Browser และพิมพ์ http://IP_ของ_VPS/phpinfo.php ถ้าเห็นหน้า PHP Information แสดงว่า LEMP Stack ทำงานสมบูรณ์
⚠️ ลบไฟล์ phpinfo.php ทันทีหลังทดสอบ: ไฟล์นี้เปิดเผยข้อมูล Server Configuration ที่ละเอียดอ่อน ห้ามทิ้งไว้บน Production Server เด็ดขาด
sudo rm /var/www/html/phpinfo.php
10. ติดตั้ง SSL ด้วย Let's Encrypt (Certbot)
Let's Encrypt ให้ SSL Certificate ฟรี ติดตั้ง Certbot:
sudo apt install certbot python3-certbot-nginx -y
ขอ Certificate และตั้งค่า Nginx อัตโนมัติ:
sudo certbot --nginx -d example.com -d www.example.com
Certbot จะถามอีเมล, ยอมรับ Terms of Service และเลือกว่าจะ Redirect HTTP → HTTPS อัตโนมัติหรือไม่ (แนะนำให้ Redirect)
ทดสอบการต่ออายุอัตโนมัติ
sudo certbot renew --dry-run
ถ้าผ่านโดยไม่มี Error แสดงว่า Auto-Renew ตั้งค่าถูกต้อง Certificate จะต่ออายุอัตโนมัติก่อนหมดอายุ 30 วัน
💡 เทคนิคเพิ่มเติม: AsiaGB มีบริการ SSL Certificate แบบ Paid (OV/EV/Wildcard) สำหรับธุรกิจที่ต้องการ Green Padlock พร้อมชื่อองค์กร หรือ Wildcard ที่ครอบคลุมทุก Subdomain ราคาเริ่มต้น 1,000 บาท/ปี
11. เทคนิค Optimize Performance LEMP Stack
หลังติดตั้งครบแล้ว ปรับค่าเหล่านี้เพื่อประสิทธิภาพที่ดีขึ้น:
เปิด Nginx Gzip Compression
แก้ไข /etc/nginx/nginx.conf ใน Block http {}:
gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
ปรับค่า PHP-FPM Pool
แก้ไข /etc/php/8.1/fpm/pool.d/www.conf:
pm = dynamic pm.max_children = 20 pm.start_servers = 5 pm.min_spare_servers = 3 pm.max_spare_servers = 10 pm.max_requests = 500
ค่าเหล่านี้เหมาะกับ VPS RAM 2 GB ปรับตามทรัพยากรที่มีจริง
ตั้งค่า MySQL Buffer Pool
แก้ไข /etc/mysql/mysql.conf.d/mysqld.cnf:
[mysqld] innodb_buffer_pool_size = 256M innodb_log_file_size = 64M query_cache_size = 0 query_cache_type = 0
12. แก้ปัญหาที่พบบ่อยใน LEMP Stack
| ปัญหา | วิธีแก้ |
|---|---|
| 502 Bad Gateway | PHP-FPM ไม่ทำงาน: sudo systemctl restart php8.1-fpm |
| 403 Forbidden | Permission ไม่ถูก: sudo chown -R www-data:www-data /var/www/html |
| PHP ดาวน์โหลดแทนรัน | ขาด location block ~ \.php$ หรือ Socket Path ผิด |
| MySQL เชื่อมต่อไม่ได้ | ตรวจ credentials: mysql -u webuser -p |
| Nginx ไม่ Start หลัง Config แก้ | sudo nginx -t เพื่อดู Error ใน Config |
13. คำถามที่พบบ่อยเกี่ยวกับ LEMP Stack
LEMP Stack คืออะไร แตกต่างจาก LAMP Stack อย่างไร?
LEMP Stack ใช้ Nginx (E) แทน Apache (A) ใน LAMP Stack ข้อดีของ Nginx คือจัดการ Concurrent Connection ได้มากกว่า กิน RAM น้อยกว่าในสถานการณ์ที่มี Traffic หนาแน่น เหมาะกับ VPS ที่ทรัพยากรมีจำกัด ส่วน LAMP เหมาะถ้าต้องการใช้ .htaccess อย่างเต็มรูปแบบ
VPS สเปกเท่าไหร่ถึงจะรัน LEMP Stack ได้?
ขั้นต่ำ RAM 1 GB สำหรับเว็บเดียว แนะนำ 2 GB ขึ้นไปสำหรับ WordPress หรือเว็บที่มี Traffic ปานกลาง VPS ของ AsiaGB เริ่มต้น 500 บาท/เดือน RAM 1 GB เพียงพอสำหรับ LEMP Stack เว็บขนาดเล็ก-กลาง
PHP-FPM คืออะไร ทำไมต้องใช้กับ Nginx?
PHP-FPM (FastCGI Process Manager) เป็น PHP Handler ที่ทำงานเป็น Daemon แยกจาก Nginx ต่างจาก Apache ที่รัน PHP ได้ในตัวเอง Nginx ต้องส่ง Request ผ่าน FastCGI Socket มาที่ PHP-FPM ทำให้แยก Process อิสระ ปรับแต่ง Resource ได้ละเอียดกว่า
ติดตั้ง LEMP Stack แล้วรัน WordPress ได้เลยไหม?
ได้ทันที สร้าง Database ใน MySQL, ดาวน์โหลด WordPress, แตกไฟล์ใน Web Root ของ Domain แล้วตั้งค่า Nginx Server Block ให้ถูกต้อง ควรติดตั้ง Plugin Cache (เช่น LiteSpeed Cache หรือ WP Rocket) เพิ่มเพื่อ Performance สูงสุด
ต้องตั้งค่า Firewall (UFW) ด้วยไหม?
ควรตั้งเสมอเพื่อความปลอดภัย เปิดเฉพาะ Port ที่จำเป็น: SSH (22), HTTP (80) และ HTTPS (443) ด้วยคำสั่ง sudo ufw allow OpenSSH && sudo ufw allow 'Nginx Full' && sudo ufw enable
MySQL Secure Installation จำเป็นต้องรันไหม?
จำเป็นมากสำหรับ Production Server ช่วยลบ Anonymous User, ปิด Remote Root Login และลบ Test Database ที่เป็นช่องโหว่ด้านความปลอดภัย ถ้าไม่รัน MySQL ของคุณมีความเสี่ยงสูงที่จะถูกโจมตี
เริ่มต้นใช้งาน VPS สำหรับ LEMP Stack วันนี้
VPS Linux เริ่มต้น 500 บาท/เดือน Full Root Access, SSD, Uptime 99% ทำเลไทยและสิงคโปร์
ดูแพ็กเกจ VPS