ติดตั้ง Nginx, PHP-FPM และ MariaDB (LEMP) บน Ubuntu
LEMP คือชุดซอฟต์แวร์สำหรับรันเว็บไซต์ภาษา PHP ประกอบด้วย Linux, Nginx (อ่านว่า Engine-X), MariaDB หรือ MySQL และ PHP ที่ทำงานผ่าน PHP-FPM ชุดนี้เหมาะกับเว็บไซต์อย่าง WordPress, Laravel หรือระบบหลังบ้านที่เขียนด้วย PHP โดย Nginx รับคำขอจากผู้ใช้และส่งต่อไฟล์ PHP ให้ PHP-FPM ประมวลผล ส่วน MariaDB เก็บข้อมูลของเว็บไซต์
คู่มือนี้อธิบายการติดตั้งบน Ubuntu 22.04 และ 24.04 ตั้งแต่ติดตั้งแพ็กเกจ ตั้งค่า Server Block สำหรับโดเมนของคุณ ไปจนถึงทดสอบว่า PHP ทำงานได้จริง เหมาะสำหรับเซิร์ฟเวอร์ที่เพิ่งสร้างใหม่และยังไม่มี Web Server ตัวอื่นติดตั้งอยู่
สิ่งที่ต้องเตรียม
- เซิร์ฟเวอร์ Ubuntu 22.04 หรือ 24.04 ที่เข้าถึงผ่าน SSH ได้
- ผู้ใช้ที่มีสิทธิ์
sudo(ดูวิธีสร้างได้ที่ สร้างผู้ใช้ใหม่และให้สิทธิ์ sudo บน Linux) - โดเมนที่ชี้ A Record มายัง IP ของเซิร์ฟเวอร์แล้ว (ถ้ายังไม่มี ใช้ IP ทดสอบไปก่อนได้)
- พอร์ต 80 และ 443 เปิดให้เข้าถึงได้
ในตัวอย่างจะใช้โดเมน example.com ให้เปลี่ยนเป็นโดเมนจริงของคุณทุกจุด
ขั้นตอนที่ 1: อัปเดตแพ็กเกจและติดตั้ง Nginx
เริ่มจากอัปเดตรายการแพ็กเกจ แล้วติดตั้ง Nginx
sudo apt update
sudo apt install -y nginxเมื่อติดตั้งเสร็จ Nginx จะเริ่มทำงานและตั้งให้เปิดอัตโนมัติเมื่อบูตเครื่อง ตรวจสอบสถานะได้ด้วยคำสั่ง
systemctl status nginxผลลัพธ์ควรแสดง Active: active (running) กด q เพื่อออก
หากเปิด UFW Firewall ไว้ ให้อนุญาตพอร์ต HTTP และ HTTPS
sudo ufw allow 'Nginx Full'
sudo ufw statusหากเซิร์ฟเวอร์มี Security Group หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้เปิดพอร์ตนั้นเพิ่มด้วย จากนั้นเปิดเบราว์เซอร์ไปที่ http://IP-ของเซิร์ฟเวอร์ จะเห็นหน้า "Welcome to nginx!"
ขั้นตอนที่ 2: ติดตั้ง MariaDB และตั้งค่าความปลอดภัยเบื้องต้น
sudo apt install -y mariadb-server
sudo systemctl status mariadbUbuntu 22.04 จะได้ MariaDB 10.6 ส่วน Ubuntu 24.04 จะได้ MariaDB 10.11 จากนั้นรันสคริปต์ตั้งค่าความปลอดภัย
sudo mysql_secure_installationคำตอบที่แนะนำสำหรับเซิร์ฟเวอร์ใหม่มีดังนี้
- Enter current password for root: กด Enter เพราะยังไม่มีรหัสผ่าน
- Switch to unix_socket authentication: ตอบ
nเพราะบน Ubuntu ผู้ใช้ root ของ MariaDB ใช้ unix_socket อยู่แล้ว - Change the root password: ตอบ
nได้ ผู้ใช้ root จะเข้าได้ผ่านsudo mysqlเท่านั้น ซึ่งปลอดภัยกว่า - Remove anonymous users, Disallow root login remotely, Remove test database, Reload privilege tables: ตอบ
Yทั้งหมด
ทดสอบเข้าใช้งานด้วย
sudo mysqlจะเห็นพรอมต์ MariaDB [(none)]> พิมพ์ exit เพื่อออก สำหรับการสร้างฐานข้อมูลและผู้ใช้ให้เว็บไซต์ ดูต่อได้ที่ สร้างฐานข้อมูลและผู้ใช้ MySQL/MariaDB พร้อมกำหนดสิทธิ์
ขั้นตอนที่ 3: ติดตั้ง PHP-FPM และส่วนขยายที่ใช้บ่อย
sudo apt install -y php-fpm php-mysql php-mbstring php-xml php-curl php-zip php-gd php-intlแพ็กเกจ php-fpm จะติดตั้ง PHP เวอร์ชันมาตรฐานของ Ubuntu รุ่นนั้น คือ PHP 8.1 บน Ubuntu 22.04 และ PHP 8.3 บน Ubuntu 24.04 ตรวจสอบเวอร์ชันและชื่อ Socket ที่ต้องใช้ในขั้นตอนถัดไป
php -v
ls /run/php/ผลลัพธ์ของ ls จะเป็นชื่อไฟล์ เช่น php8.3-fpm.sock ให้จดไว้ และตรวจว่า Service ทำงานอยู่
systemctl status php8.3-fpmหากใช้ Ubuntu 22.04 ให้เปลี่ยน 8.3 เป็น 8.1 ทุกจุดในคู่มือนี้
หมายเหตุ: ไม่ต้องติดตั้งแพ็กเกจ
phpเปล่า ๆ เพราะบางกรณีจะดึง Apache ติดตั้งมาด้วยและแย่งพอร์ต 80 กับ Nginx การติดตั้งphp-fpmตามคำสั่งข้างต้นเพียงพอแล้ว
ขั้นตอนที่ 4: สร้างโฟลเดอร์เว็บไซต์และ Server Block
สร้างโฟลเดอร์สำหรับเก็บไฟล์เว็บไซต์ และกำหนดเจ้าของเป็น www-data ซึ่งเป็นผู้ใช้ที่ Nginx และ PHP-FPM ใช้ทำงาน
sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.comสร้างไฟล์ตั้งค่า Server Block
sudo nano /etc/nginx/sites-available/example.comใส่เนื้อหาต่อไปนี้ แล้วบันทึกด้วย Ctrl+O และออกด้วย Ctrl+X
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}บรรทัด try_files ส่งคำขอที่ไม่ตรงกับไฟล์จริงไปที่ index.php ซึ่งเป็นรูปแบบที่ WordPress และ Framework ส่วนใหญ่ต้องการ ส่วน fastcgi_pass ต้องตรงกับชื่อ Socket ที่ได้จากขั้นตอนที่ 3
เปิดใช้งาน Server Block ปิด Server Block ตัวอย่างของ Nginx แล้วทดสอบไวยากรณ์ก่อนโหลดใหม่
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo unlink /etc/nginx/sites-enabled/default
sudo nginx -tผลลัพธ์ที่ถูกต้องคือ
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulจากนั้นโหลดค่าใหม่
sudo systemctl reload nginxขั้นตอนที่ 5: ทดสอบการทำงานของ PHP
สร้างไฟล์ทดสอบชั่วคราว
echo '<?php phpinfo();' | sudo tee /var/www/example.com/info.phpเปิด http://example.com/info.php ในเบราว์เซอร์ หากเห็นหน้าตารางข้อมูล PHP และบรรทัด Server API แสดงค่า FPM/FastCGI แปลว่าระบบทำงานครบแล้ว
ลบไฟล์นี้ทันทีหลังทดสอบ เพราะเปิดเผยข้อมูลการตั้งค่าของเซิร์ฟเวอร์ให้ทุกคนเห็น
sudo rm /var/www/example.com/info.phpตรวจสอบผลลัพธ์
systemctl is-active nginx mariadb php8.3-fpmต้องแสดงactiveทั้งสามบรรทัดsudo ss -tlnp | grep -E ':80|:3306'ควรเห็น Nginx ฟังพอร์ต 80 และ MariaDB ฟังพอร์ต 3306 ที่127.0.0.1เท่านั้น ซึ่งเป็นค่าเริ่มต้นที่ปลอดภัยcurl -I http://example.comควรได้HTTP/1.1 200 OKหรือ 403 ถ้าโฟลเดอร์ยังไม่มีไฟล์ index
ขั้นตอนต่อไปที่แนะนำคือติดตั้ง SSL ตามคู่มือ ติดตั้ง SSL ฟรีจาก Let's Encrypt ด้วย Certbot บน Nginx
ปัญหาที่พบบ่อย
502 Bad Gateway
Nginx ติดต่อ PHP-FPM ไม่ได้ สาเหตุที่พบบ่อยที่สุดคือชื่อ Socket ใน fastcgi_pass ไม่ตรงกับเวอร์ชัน PHP ที่ติดตั้งจริง ตรวจด้วย ls /run/php/ แก้ไฟล์ Server Block ให้ตรง แล้วรัน sudo nginx -t และ sudo systemctl reload nginx ดู Error ละเอียดได้ที่ /var/log/nginx/error.log
เบราว์เซอร์ดาวน์โหลดไฟล์ .php แทนการแสดงผล
แปลว่าบล็อก location ~ \.php$ ไม่ทำงาน อาจพิมพ์ผิดหรือแก้ไฟล์แล้วไม่ได้ reload ให้ตรวจไฟล์อีกครั้ง และล้าง Cache ของเบราว์เซอร์ก่อนทดสอบใหม่
Nginx เริ่มทำงานไม่ได้ เพราะพอร์ต 80 ถูกใช้งานอยู่
มักเกิดจากมี Apache ติดตั้งอยู่ ตรวจด้วย sudo ss -tlnp | grep ':80' หากเป็น apache2 และไม่ได้ใช้งาน ให้หยุดและปิดด้วย sudo systemctl disable --now apache2 แล้ว sudo systemctl start nginx
403 Forbidden
โฟลเดอร์ยังไม่มีไฟล์ index.php หรือ index.html หรือสิทธิ์ไฟล์ไม่ถูกต้อง ตรวจว่าไฟล์เป็นของ www-data และโฟลเดอร์มีสิทธิ์อย่างน้อย 755 ไฟล์ 644
หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมงาน Support ของ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ โดยแจ้งชื่อเซิร์ฟเวอร์ ระบบปฏิบัติการ ขั้นตอนที่ทำไปแล้ว และข้อความ Error ที่พบ เพื่อให้ตรวจสอบได้รวดเร็วขึ้น
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


