การใช้ Nginx เป็น Reverse Proxy หน้า Apache เป็นสถาปัตยกรรมที่ได้รับความนิยมอย่างมากสำหรับการโฮสต์ WordPress บน Cloud VPS โดยให้ Nginx ทำหน้าที่รับ Request และเสิร์ฟ Static Files อย่างรวดเร็ว แล้วส่งเฉพาะ PHP Request ไปให้ Apache จัดการ
ทำไมต้องใช้ Nginx + Apache?
Apache เป็น Web Server ที่รองรับ .htaccess และมอดูล mod_rewrite ที่ WordPress ต้องการ แต่ Apache ใช้ทรัพยากรมากเมื่อเสิร์ฟ Static Files เช่น รูปภาพ CSS และ JavaScript ส่วน Nginx เป็นเลิศในการจัดการ Static Content และ Concurrent Connections การรวมข้อดีของทั้งสองจึงให้เว็บไซต์เร็วขึ้นและรองรับโหลดได้มากขึ้น
ตั้งค่า Apache ฟังพอร์ตอื่น
เปลี่ยน Apache ให้ฟังพอร์ต 8080 แทน 80 เพื่อให้ Nginx รับ Request บนพอร์ต 80/443:
# /etc/apache2/ports.conf
Listen 8080
# /etc/apache2/sites-available/wordpress.conf
<VirtualHost *:8080>
ServerName yourdomain.com
DocumentRoot /var/www/html/wordpress
<Directory /var/www/html/wordpress>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/wordpress-error.log
CustomLog ${APACHE_LOG_DIR}/wordpress-access.log combined
</VirtualHost>
ตั้งค่า Nginx เป็น Reverse Proxy
server {
listen 80;
server_name yourdomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# Static files - Nginx serves directly
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|svg)$ {
root /var/www/html/wordpress;
expires 30d;
add_header Cache-Control "public, immutable";
}
# Pass PHP requests to Apache
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
}
ตั้งค่า WordPress ให้รองรับ Proxy
เพิ่มใน wp-config.php เพื่อให้ WordPress รู้ว่าทำงานอยู่หลัง Proxy:
define('FORCE_SSL_ADMIN', true);
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
เปิดใช้งานและทดสอบ
sudo systemctl restart apache2
sudo systemctl restart nginx
curl -I https://yourdomain.com
ตรวจสอบว่า Response Header แสดง Server: nginx และ WordPress ทำงานได้ตามปกติ
ข้อดีของ Plesk
Cloud VPS ของ de.co.th ที่ติดตั้ง Plesk มาพร้อม จะตั้งค่า Nginx เป็น Reverse Proxy หน้า Apache ให้อัตโนมัติอยู่แล้ว คุณสามารถปรับแต่งเพิ่มเติมได้ผ่าน Apache & nginx Settings ใน Plesk Panel โดยไม่ต้องแก้ไข Config ด้วยตัวเอง
สรุป
การตั้งค่า Nginx เป็น Reverse Proxy หน้า Apache บน Cloud VPS ของ de.co.th ช่วยเพิ่มความเร็วในการเสิร์ฟ Static Content รองรับ Concurrent Connections ได้มากขึ้น และยังคงความเข้ากันได้กับปลั๊กอิน WordPress ที่ต้องการ .htaccess

