ตัวอย่าง
นี่คือขั้นตอนตั้งค่า PHP 5.6 ให้รันบน subdomain old.chaiyakul.com
โดยใช้ Docker PHP 5.6 FPM รันในเครื่อง CentOS 9 พร้อมตั้งให้รันอัตโนมัติหลัง reboot และเก็บไฟล์เว็บที่
/var/www/html/old-chaiyakul.com/
ขั้นตอนตั้งค่า
1.สร้างโฟลเดอร์เว็บและวางไฟล์ PHP
mkdir -p /var/www/html/old-chaiyakul.com
# วางไฟล์ PHP ของคุณไว้ที่นี่ เช่น index.php ที่มี <?php phpinfo(); ?>
2.รัน Docker container PHP 5.6 FPM
docker run -d \
--name php56-fpm \
-p 9006:9000 \
-v /var/www/html/old-chaiyakul.com:/var/www/html/old-chaiyakul.com \
-v /opt/php56/php.ini:/usr/local/etc/php/php.ini \
--restart unless-stopped \
php:5.6-fpm
ตัวเลือก --restart unless-stopped
ทำให้ container รันอัตโนมัติหลัง reboot
3.ติดตั้ง Apache และโมดูลที่จำเป็น
sudo dnf install -y httpd mod_proxy mod_proxy_fcgi
sudo systemctl enable httpd
sudo systemctl start httpd
4. สร้างไฟล์ VirtualHost สำหรับ subdomain
สร้างไฟล์ /etc/httpd/conf.d/old-chaiyakul.com.conf
:
<VirtualHost *:80>
ServerName old.chaiyakul.com
DocumentRoot /var/www/html/old-chaiyakul.com
<Directory "/var/www/html/old-chaiyakul.com">
AllowOverride All
Require all granted
</Directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9006/var/www/html/old-chaiyakul.com/$1
ErrorLog /var/log/httpd/old-chaiyakul-error.log
CustomLog /var/log/httpd/old-chaiyakul-access.log combined
</VirtualHost>
5.รีสตาร์ท Apache
sudo systemctl restart httpd
6.ตั้งค่า DNS
ตั้งค่า DNS ให้ subdomain old.chaiyakul.com
ชี้ไปที่ IP เซิร์ฟเวอร์นี้
7.ทดสอบ
เปิดเบราว์เซอร์เข้า http://old.chaiyakul.com
ถ้ามีไฟล์ index.php
ที่มี <?php phpinfo(); ?>
จะเห็นเวอร์ชัน PHP 5.6 แสดงขึ้นมา
สรุป
- PHP 5.6 รันใน Docker container พร้อม
--restart unless-stopped
ให้รันอัตโนมัติหลัง reboot - Apache ตั้ง VirtualHost ให้ subdomain ใช้ DocumentRoot ที่
/var/www/html/old-chaiyakul.com
- Apache สั่งให้ใช้ PHP-FPM 5.6 ผ่านพอร์ต 9006 ที่เชื่อมกับ Docker container
ในกรณีที่ขึ้น File not found
เป็น ปัญหา classic ที่เกิดจาก Apache ส่ง path ไปยัง PHP-FPM (Docker) แต่ PHP-FPM หาไฟล์ไม่เจอ เพราะมอง path ไม่เหมือนกัน
ทำให้ Apache ใช้ path ตรงกับใน container
1.แก้ config ของ Apache:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9006"
ProxyFCGIBackendType GENERIC
ProxyFCGISetEnvIf "true" SCRIPT_FILENAME "/var/www/html%{REQUEST_URI}"
</FilesMatch>
เปลี่ยน /var/www/html/old-chaiyakul.com%{REQUEST_URI}
เป็น: /var/www/html%{REQUEST_URI}
2.Restart Apache:
sudo systemctl restart httpd
การตั้งค่า VirtualHost แบบ HTTPS สำหรับ Apache
การตั้งค่า VirtualHost แบบ HTTPS สำหรับ Apache (เช่นใน CentOS 9) ต้องมี:
- Domain/subdomain ที่ชี้มาถูกต้อง (เช่น
old.chaiyakul.com
) - มีใบรับรอง SSL (เช่นจาก Let’s Encrypt หรือ self-signed)
- ตั้งค่า Apache ให้รับ HTTPS ผ่านพอร์ต 443
ตัวอย่างไฟล์ VirtualHost แบบ HTTPS
<VirtualHost *:443>
ServerName old.chaiyakul.com
DocumentRoot /var/www/html/old-chaiyakul.com
<Directory "/var/www/html/old-chaiyakul.com">
AllowOverride All
Require all granted
</Directory>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ip-default.crt
SSLCertificateKeyFile /etc/pki/tls/private/ip-default.key
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9006/var/www/html/old-chaiyakul.com/$1
ErrorLog /var/log/httpd/old-chaiyakul-ssl-error.log
CustomLog /var/log/httpd/old-chaiyakul-ssl-access.log combined
</VirtualHost>