Migration Từ Nginx/Apache Sang OpenLiteSpeed: Hướng Dẫn Không Downtime
Câu Hỏi Thường Gặp (FAQ)
Migration sang OpenLiteSpeed có gây downtime không?
Không, nếu làm đúng cách. Chiến lược là chạy song song cả web server cũ và OpenLiteSpeed trên hai port khác nhau, test kỹ, rồi chuyển DNS từ từ. Toàn bộ quá trình người dùng không hề biết server đã thay đổi.
OpenLiteSpeed có tương thích với .htaccess của Apache không?
Có. LiteSpeed hỗ trợ phần lớn .htaccess rules, bao gồm rewrite rules, authentication, và các module phổ biến. Đây là một trong những lý do lớn nhất để chọn LiteSpeed thay vì Nginx khi migrate từ Apache — hầu như không cần sửa lại rules.
Migrate từ Nginx sang OpenLiteSpeed khó không?
Không quá khó, nhưng phải convert manual. Nginx dùng server blocks, OpenLiteSpeed dùng Virtual Hosts qua Admin Panel. Rewrite rules cũng khác cú pháp. Bài viết này hướng dẫn chi tiết từng bước convert.
Có nên rollback nếu migration không thành công?
Có, và rollback plan là phần bắt buộc. Giữ nguyên cấu hình Nginx/Apache cũ, không xóa gì cho đến khi đã chạy ổn định ít nhất 48 giờ. Rollback chỉ cần switch DNS hoặc iptables về port cũ.
Mất bao lâu để migrate một site WordPress?
Với chuẩn bị kỹ, khoảng 2-4 giờ cho site đơn giản. Site phức tạp (nhiều custom rules, nhiều domain, WooCommerce) có thể mất 1-2 ngày. Phần tốn thời gian nhất không phải cài đặt mà là test và verify.
Performance cải thiện bao nhiêu sau khi migrate?
Từ trải nghiệm cá nhân và benchmark thực tế: TTFB giảm 40-60%, số request/giây tăng 2-3x, memory usage giảm 30-50%. LSCache ở level server nhanh hơn WP Super Cache hay W3TC đáng kể. Chi tiết benchmark có trong bài.
Khi Nào Nên Migrate Sang OpenLiteSpeed
Chuyển web server không phải quyết định nhẹ nhàng. Nhưng có những dấu hiệu rõ ràng cho thấy Nginx hoặc Apache không còn phù hợp với nhu cầu của bạn.
Dấu hiệu từ Apache
Apache vẫn ổn cho site nhỏ, nhưng khi traffic tăng lên:
- Memory usage liên tục cao — Apache dùng process-based model (prefork), mỗi connection ăn một process. 100 concurrent connections có thể ngốn 2-3GB RAM. Nếu server thường xuyên swap, đó là dấu hiệu.
- Response time tăng theo traffic — Apache scale theo process, không phải event. Khi concurrent connections tăng, response time tăng tuyến tính.
- Không tận dụng được server hardware — Apache single-threaded per process, không dùng hiệu quả multi-core CPU.
- .htaccess overhead — Mỗi request Apache phải parse .htaccess ở mọi thư mục cha. Site có nhiều thư mục = overhead đáng kể.
Dấu hiệu từ Nginx
Nginx nhanh, nhưng có những điểm yếu thực tế:
- Cache phức tạp — FastCGI cache của Nginx hoạt động, nhưng cấu hình phức tạp. Không có GUI, phải edit config file cho mọi thay đổi. Tôi đã mất hàng giờ debug FastCGI cache rules.
- Không tương thích .htaccess — Nếu bạn cần migrate từ Apache hoặc dùng WordPress plugin dựa vào .htaccess, Nginx bắt buộc phải convert manual.
- Dynamic content chậm hơn — Nginx xử lý static file xuất sắc, nhưng PHP processing qua PHP-FPM chậm hơn LSAPI. Benchmark cụ thể ở bài so sánh OpenLiteSpeed vs Nginx vs Apache.
- Quản lý không có GUI — Mọi thứ qua config file. Không sai, nhưng khi quản lý nhiều site, Admin Panel của LiteSpeed tiện hơn nhiều.
Khi nào KHÔNG nên migrate
Thành thật mà nói, không phải lúc nào cũng nên:
- Server đang chạy ổn định, traffic thấp — Nếu site chỉ vài nghìn visitor/tháng và response time đã dưới 200ms, migration không đáng công sức.
- Team chỉ quen Nginx/Apache — Migration kéo theo learning curve. Nếu team nhỏ và không có thời gian học hệ thống mới, giữ nguyên có khi tốt hơn.
- Ứng dụng non-PHP — Nếu chạy Node.js, Python, hoặc Java app thuần túy, lợi ích của LiteSpeed không rõ ràng bằng khi chạy PHP/WordPress.
- Đang chạy CloudFlare CDN với đầy đủ cache — Nếu Cloudflare đã cache hầu hết nội dung, web server phía sau ít ảnh hưởng đến performance end-user.
Tôi đã từng migrate một site Nginx chạy ổn định 3 năm, chỉ vì “thử LiteSpeed xem sao”. Kết quả: mất 2 ngày, gặp mấy bug nhỏ, và performance gần như giống hệt vì site đó traffic thấp. Bài học: chỉ migrate khi có lý do rõ ràng.
Chuẩn Bị Trước Khi Migrate
Phần này quan trọng nhất. Chuẩn bị kỹ thì migration mượt mà. Chuẩn bị hời thì sửa suốt.
Bước 1: Backup toàn bộ
Không thương lượng. Backup mọi thứ trước khi đụng vào bất cứ điều gì.
# Backup toàn bộ website files
sudo tar czf /backup/site-backup-$(date +%Y%m%d).tar.gz /var/www/yoursite/
# Backup database
sudo mysqldump -u root -p --all-databases | gzip > /backup/db-backup-$(date +%Y%m%d).sql.gz
# Backup Nginx config
sudo tar czf /backup/nginx-config-$(date +%Y%m%d).tar.gz /etc/nginx/
# Backup Apache config (nếu dùng Apache)
sudo tar czf /backup/apache-config-$(date +%Y%m%d).tar.gz /etc/apache2/
# Backup SSL certificates
sudo tar czf /backup/ssl-certs-$(date +%Y%m%d).tar.gz /etc/letsencrypt/
# Backup crontab
crontab -l > /backup/crontab-backup-$(date +%Y%m%d).txt
# Verify backup
ls -la /backup/*$(date +%Y%m%d)*
Kiểm tra backup có restore được không:
# Test extract (không restore thật)
tar tzf /backup/site-backup-$(date +%Y%m%d).tar.gz | head -20
zcat /backup/db-backup-$(date +%Y%m%d).sql.gz | head -50
Bước 2: Audit cấu hình hiện tại
Ghi lại toàn bộ cấu hình đang chạy. Đây là tài liệu tham chiếu khi convert.
# Nginx: Liệt kê tất cả server blocks
sudo nginx -T 2>/dev/null | grep -E "server_name|listen|root|index|rewrite|proxy_pass|fastcgi"
# Nginx: Liệt kê tất cả upstream
sudo nginx -T 2>/dev/null | grep -E "upstream|server.*:"
# Apache: Liệt kê tất cả VirtualHost
sudo apachectl -S 2>/dev/null
# Kiểm tra PHP version và extensions
php -v
php -m
# Kiểm tra modules đang load
# Nginx
sudo nginx -V 2>&1 | tr ' ' '\n' | grep module
# Apache
sudo apachectl -M 2>/dev/null
Bước 3: Document cấu hình quan trọng
Tạo file tài liệu ghi lại những thứ cần migrate:
cat > /tmp/migration-notes.md << 'EOF'
# Migration Notes
## Domains
- example.com (main site, WordPress)
- blog.example.com (subdomain, WordPress)
- api.example.com (subdomain, custom PHP)
## SSL Certificates
- /etc/letsencrypt/live/example.com/
- /etc/letsencrypt/live/blog.example.com/
## Rewrite Rules (Nginx)
- WordPress permalinks: try_files $uri $uri/ /index.php?$args
- Redirect www → non-www
- Redirect HTTP → HTTPS
- Custom redirect /old-page → /new-page
## Upstream/Proxy
- PHP-FPM: unix:/run/php/php8.2-fpm.sock
- No reverse proxy setup
## Cache
- FastCGI cache: /var/cache/nginx/fastcgi
- Browser cache: static files 30 days
## Cron Jobs
- SSL renewal: certbot renew
- DB backup: daily at 2AM
- Log rotation: weekly
## Special Notes
- Max upload: 64MB
- Timeout: 300s (for large imports)
- Rate limiting on wp-login.php
- IP whitelist for /wp-admin
EOF
Phần document này sẽ tiết kiệm hàng giờ debug sau này. Tôi đã từng skip bước này và mất cả ngày tìm xem “rewrite rule đó đâu rồi”.
Chiến Lược Không Downtime
Đây là phần quan trọng nhất. Nguyên tắc: không bao giờ tắt web server cũ trước khi web server mới đã chạy ổn định.
Kiến trúc song song
Internet → DNS → Server
├── Nginx/Apache (port 80/443) ← hiện tại
└── OpenLiteSpeed (port 8080/8443) ← mới, test nội bộ
Bước triển khai
Bước 1: Cài OpenLiteSpeed song song
# Thêm repository
sudo wget -O - https://repo.litespeed.sh | sudo bash
# Cài đặt OpenLiteSpeed
sudo apt install openlitespeed -y
# OpenLiteSpeed mặc định chạy trên port 8088 (HTTP) và 7080 (Admin Panel)
# Kiểm tra
sudo systemctl status lsws
curl -I http://localhost:8088
Lưu ý: Nếu Nginx đang chiếm port 80, OpenLiteSpeed sẽ dùng port mặc định 8088. Không xung đột.
Bước 2: Cấu hình OpenLiteSpeed trên port nội bộ
Truy cập Admin Panel: https://your-server-ip:7080 (user/pass mặc định: admin/123456 — đổi ngay).
Thay đổi listener port để tránh xung đột:
Admin Panel → Configuration → Listeners → HTTP
→ Port: 8080 (thay vì 80)
Admin Panel → Configuration → Listeners → HTTPS
→ Port: 8443 (thay vì 443)
Bước 3: Test nội bộ trên port mới
# Test trang chủ qua OpenLiteSpeed
curl -I http://localhost:8080
# Test SSL
curl -Ik https://localhost:8443
# Test từ máy khác (nếu firewall cho phép)
curl -I http://your-server-ip:8080
Bước 4: Switch dần bằng iptables (zero DNS propagation)
Kỹ thuật này dùng iptables để forward traffic từ port 80 sang port 8080, không cần đợi DNS:
# Bước 4a: Forward port 80 sang OpenLiteSpeed cho MỘT IP cụ thể (test)
# Chỉ forward IP của bạn để test
sudo iptables -t nat -A PREROUTING -s YOUR_HOME_IP -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -s YOUR_HOME_IP -p tcp --dport 443 -j REDIRECT --to-port 8443
# Test từ máy bạn: truy cập bình thường (port 80/443) nhưng thực tế đã qua LiteSpeed
# Nếu ổn → tiếp tục
# Nếu lỗi → xóa rule, traffic quay về Nginx ngay lập tức
sudo iptables -t nat -D PREROUTING -s YOUR_HOME_IP -p tcp --dport 80 -j REDIRECT --to-port 8080
Bước 5: Switch toàn bộ traffic
Khi đã test kỹ và ổn:
# Cách 1: iptables redirect toàn bộ (ngay lập tức)
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
# Lưu iptables rules
sudo iptables-save > /etc/iptables.rules
Hoặc:
# Cách 2: Dừng Nginx, đổi LiteSpeed về port 80/443
sudo systemctl stop nginx
sudo systemctl disable nginx
# Đổi port trong Admin Panel → restart
sudo systemctl restart lsws
Cách 2 đơn giản hơn nhưng có vài giây downtime. Cách 1 zero downtime hoàn toàn.
Migration Từ Nginx
Convert server blocks sang Virtual Hosts
Nginx dùng server block, OpenLiteSpeed dùng Virtual Host. Cấu trúc khác nhau nhưng concept tương đương.
Nginx server block điển hình:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# WordPress specific
location ~ ^/wp-(admin|login|includes) {
# Custom rules
}
}
Tương đương trong OpenLiteSpeed Admin Panel:
- Tạo Virtual Host:
Admin Panel → Virtual Hosts → Add
→ Virtual Host Name: example.com
→ Document Root: /var/www/example.com/public
- Tạo Listener Mapping:
Admin Panel → Configuration → Listeners → HTTP → Virtual Host Mappings
→ Add Mapping
→ Virtual Host: example.com
→ Domain: example.com, www.example.com
- Cấu hình Rewrite Rules:
Admin Panel → Virtual Hosts → example.com → Rewrite
→ Enable Rewrite: Yes
→ Rewrite Rules:
Bảng tham chiếu convert Nginx → OpenLiteSpeed
| Nginx | OpenLiteSpeed | Ghi chú |
|---|---|---|
server { } |
Virtual Host | Mỗi server block = 1 Virtual Host |
listen 80 |
Listener HTTP (port 80) | Mapping qua Virtual Host Mappings |
server_name |
Domain trong Virtual Host Mapping | Hỗ trợ wildcard |
root /path |
Document Root trong Virtual Host | Đường dẫn tuyệt đối |
index index.php |
Index Files trong Virtual Host | Mặc định đã có |
try_files $uri $uri/ /index.php?$args |
Rewrite Rule | RewriteRule .* /index.php [L] |
fastcgi_pass |
PHP LSAPI (tự động) | Không cần cấu hình riêng |
expires 30d |
Browser Cache trong Virtual Host | Hoặc qua .htaccess |
proxy_pass |
Context → Proxy | Hỗ trợ reverse proxy |
location /path |
Context | Static, Proxy, CGI, hoặc Servlet |
access_log |
Virtual Host → Log | Tự động |
error_page 404 |
Error Page trong Virtual Host | Custom error pages |
limit_req |
Rate Limiting trong Virtual Host | Cấu hình khác nhưng tương đương |
auth_basic |
Realm trong Virtual Host | Password protection |
return 301 |
Rewrite Rule | RewriteRule ^old$ /new [R=301,L] |
Convert rewrite rules
WordPress permalink (quan trọng nhất):
# Nginx
location / {
try_files $uri $uri/ /index.php?$args;
}
# OpenLiteSpeed Rewrite Rules
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]
Redirect www sang non-www:
# Nginx
server {
server_name www.example.com;
return 301 https://example.com$request_uri;
}
# OpenLiteSpeed Rewrite Rules
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule (.*) https://example.com/$1 [R=301,L]
HTTP redirect sang HTTPS:
# Nginx
server {
listen 80;
return 301 https://$host$request_uri;
}
# OpenLiteSpeed (thêm vào Virtual Host Rewrite Rules)
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Convert proxy/reverse proxy
Nếu Nginx dùng làm reverse proxy cho Node.js hoặc ứng dụng khác:
# Nginx
location /api/ {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
Trong OpenLiteSpeed:
Admin Panel → Virtual Hosts → your-site → Context → Add
→ Type: Proxy
→ URI: /api/
→ Backend: http://127.0.0.1:3000
Migration Từ Apache
Migration từ Apache sang OpenLiteSpeed dễ hơn nhiều so với từ Nginx, vì LiteSpeed hỗ trợ .htaccess.
.htaccess Compatibility
Đây là điểm mạnh lớn nhất của LiteSpeed so với Nginx. Hầu hết .htaccess rules hoạt động ngay mà không cần sửa:
# Những thứ LiteSpeed hỗ trợ TRỰC TIẾP từ .htaccess:
RewriteEngine On
RewriteRule ^old-page$ /new-page [R=301,L]
# WordPress permalink (hoạt động ngay)
# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]
# END WordPress
# Browser caching
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 30 days"
ExpiresByType image/webp "access plus 30 days"
ExpiresByType text/css "access plus 7 days"
</IfModule>
# Compression
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>
# Deny access
<FilesMatch "^\.">
Order allow,deny
Deny from all
</FilesMatch>
# WordPress security
<Files wp-config.php>
Order allow,deny
Deny from all
</Files>
Những thứ cần convert manual
Một số Apache directives không được hỗ trợ hoặc cần thay đổi:
# Apache VirtualHost → OpenLiteSpeed Virtual Host
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example.com/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Trong OpenLiteSpeed, tạo Virtual Host mới qua Admin Panel (như hướng dẫn ở phần Nginx). Document Root, domain, logs — tất cả cấu hình qua GUI.
Directory permissions
Apache dùng <Directory> directives:
<Directory /var/www/example.com/public>
AllowOverride All
Require all granted
</Directory>
OpenLiteSpeed không cần. Mặc định cho phép .htaccess rewrite. Nếu cần hạn chế:
Admin Panel → Virtual Hosts → your-site → General
→ Enable Rewrite: Yes
→ Auto Load from .htaccess: Yes
Convert Apache modules
| Apache Module | OpenLiteSpeed | Ghi chú |
|---|---|---|
| mod_rewrite | Hỗ trợ đầy đủ | Cú pháp giống Apache |
| mod_ssl | Hỗ trợ SSL/TLS | Cấu hình qua Admin Panel |
| mod_deflate | Hỗ trợ compression | Bật trong Server → Tuning |
| mod_expires | Hỗ trợ browser cache | Qua .htaccess hoặc Admin Panel |
| mod_auth_basic | Realm authentication | Cấu hình qua Admin Panel |
| mod_proxy | Proxy Context | Hỗ trợ reverse proxy |
| mod_security | Hỗ trợ | Cấu hình chi tiết trong bài bảo mật |
| mod_php | PHP LSAPI | Nhanh hơn mod_php |
| mod_headers | Hỗ trợ | Qua .htaccess Header set |
| mod_env | Hỗ trợ một phần | Qua Rewrite Rules |
Migration WordPress Cụ thể
WordPress là use case phổ biến nhất cho migration sang LiteSpeed. Phần này đi vào chi tiết.
Permalink rules
WordPress cần rewrite rules để permalink hoạt động. Nếu migrate từ Apache, .htaccess đã có sẵn và LiteSpeed đọc được luôn. Nếu từ Nginx, phải thêm:
Qua Admin Panel:
Virtual Hosts → your-site → Rewrite
→ Enable Rewrite: Yes
→ Auto Load from .htaccess: Yes (khuyến nghị)
→ Hoặc nhập manual:
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]
Qua file .htaccess:
Tạo hoặc cập nhật file .htaccess trong document root:
cat > /var/www/yoursite/public_html/.htaccess << 'EOF'
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]
</IfModule>
# END WordPress
EOF
sudo chown www-data:www-data /var/www/yoursite/public_html/.htaccess
Thay cache plugin bằng LSCache
Đây là bước có impact lớn nhất lên performance. Nếu đang dùng WP Super Cache, W3 Total Cache, hoặc WP Rocket:
Bước 1: Deactivate cache plugin cũ (KHÔNG xóa ngay)
cd /var/www/yoursite/public_html
sudo -u www-data wp plugin deactivate wp-super-cache --path=/var/www/yoursite/public_html
# Hoặc
sudo -u www-data wp plugin deactivate w3-total-cache --path=/var/www/yoursite/public_html
Bước 2: Xóa cache files cũ
# WP Super Cache
sudo rm -rf /var/www/yoursite/public_html/wp-content/cache/
sudo rm -rf /var/www/yoursite/public_html/wp-content/wp-cache-config.php
# W3 Total Cache
sudo rm -rf /var/www/yoursite/public_html/wp-content/cache/
sudo rm -rf /var/www/yoursite/public_html/wp-content/w3tc-config/
# WP Rocket (nếu dùng)
sudo rm -rf /var/www/yoursite/public_html/wp-content/wp-rocket-config/
sudo rm -rf /var/www/yoursite/public_html/wp-content/cache/wp-rocket/
Bước 3: Cài LSCache plugin
sudo -u www-data wp plugin install litespeed-cache --activate --path=/var/www/yoursite/public_html
Bước 4: Cấu hình LSCache
Chi tiết cấu hình từng tab có trong bài hướng dẫn LiteSpeed Cache. Cấu hình cơ bản:
LSCache Plugin → General
→ Enable Cache: ON
LSCache Plugin → Cache
→ Cache Logged-in Users: OFF (trừ WooCommerce)
→ Cache Commenters: OFF
LSCache Plugin → TTL
→ Default TTL: 604800 (7 ngày)
→ Front Page TTL: 86400 (1 ngày)
Fix plugin conflicts phổ biến
Một số plugin WordPress xung đột sau khi chuyển web server:
1. Security plugins (Wordfence, iThemes Security)
Các plugin này thường ghi .htaccess rules riêng. Kiểm tra:
# Kiểm tra .htaccess có bị sửa không
cat /var/www/yoursite/public_html/.htaccess
# Nếu có duplicate rules, cleanup manual
Wordfence thường thêm rules cho “disable author scanning” và “block suspicious activity”. Hầu hết tương thích, nhưng verify sau migration.
2. SEO plugins (Yoast, Rank Math)
Yoast SEO tạo sitemap và redirect rules. Nhìn chung tương thích. Kiểm tra sitemap:
curl -I https://yoursite.com/sitemap_index.xml
# Phải trả về 200, không phải 404
3. WooCommerce
WooCommerce cần cache exclusion cho cart, checkout, account. LSCache hỗ trợ WooCommerce tự động:
LSCache Plugin → WooCommerce
→ Enable WooCommerce Cache: ON
→ Cart → Do Not Cache
→ Checkout → Do Not Cache
→ My Account → Do Not Cache
Cài đặt PHP LSAPI cho WordPress
LiteSpeed dùng PHP LSAPI thay vì PHP-FPM, nhanh hơn đáng kể. Hướng dẫn cài đặt chi tiết có trong bài cài đặt OpenLiteSpeed + WordPress, nhưng tóm tắt:
# Cài PHP 8.3 LSAPI
sudo apt install lsphp83 lsphp83-common lsphp83-mysql lsphp83-curl \
lsphp83-json lsphp83-imagick lsphp83-mbstring lsphp83-xml \
lsphp83-zip lsphp83-intl lsphp83-opcache lsphp83-redis -y
# Cấu hình trong Admin Panel
# Server → PHP → Edit
# Command: lsphp83/bin/lsphp
SSL Migration
Chuyển SSL certificate từ Nginx/Apache sang OpenLiteSpeed.
Nếu đang dùng Let’s Encrypt
# Kiểm tra certificate hiện tại
sudo certbot certificates
# Certificate thường nằm ở:
# /etc/letsencrypt/live/example.com/fullchain.pem
# /etc/letsencrypt/live/example.com/privkey.pem
Cấu hình SSL trong OpenLiteSpeed:
Admin Panel → Virtual Hosts → your-site → SSL
→ SSL Private Key & Certificate:
→ Private Key File: /etc/letsencrypt/live/example.com/privkey.pem
→ Certificate File: /etc/letsencrypt/live/example.com/fullchain.pem
→ Chained Certificate: Yes
Hoặc qua Listener (áp dụng cho nhiều Virtual Host):
Admin Panel → Configuration → Listeners → HTTPS → SSL
→ Private Key File: /etc/letsencrypt/live/example.com/privkey.pem
→ Certificate File: /etc/letsencrypt/live/example.com/fullchain.pem
Cập nhật auto-renewal cron
Let’s Encrypt renewal cần reload web server sau khi renew. Cập nhật cron job:
# Kiểm tra cron hiện tại
sudo crontab -l | grep certbot
sudo systemctl list-timers | grep certbot
# Cập nhật renewal hook
sudo cat > /etc/letsencrypt/renewal-hooks/post/reload-lsws.sh << 'EOF'
#!/bin/bash
systemctl reload lsws
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/post/reload-lsws.sh
# Nếu trước đó reload Nginx/Apache, cần đổi
# Sửa /etc/letsencrypt/renewal/example.com.conf
# deploy_hook = systemctl reload lsws
Chi tiết thêm về SSL
Cấu hình TLS 1.3, HSTS, OCSP Stapling được hướng dẫn chi tiết trong bài SSL/HTTPS với Let’s Encrypt.
DNS Switch Strategy
Khi mọi thứ đã sẵn sàng trên server, bước cuối cùng là chuyển DNS.
Chiến lược TTL thấp
# Trước migration (48h): Giảm TTL xuống thấp nhất có thể
# Tùy registrar, thường giảm được xuống 300 giây (5 phút)
# Ví dụ Cloudflare:
# DNS → TTL → Auto (60s) hoặc custom 300s
# Sau khi confirm LiteSpeed ổn định:
# Đổi A record trỏ về IP mới (hoặc giữ IP cũ nếu dùng iptables)
Hai kịch bản
Kịch bản 1: Cùng một server (đa số trường hợp)
Nếu cài LiteSpeed trên cùng server:
# Dùng iptables redirect (như hướng dẫn ở trên)
# Không cần đợi DNS propagation
# Switch ngay lập tức, rollback ngay lập tức
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
Kịch bản 2: Server khác
Nếu chuyển sang server mới chạy LiteSpeed:
# Bước 1: Giảm TTL (48h trước)
# Bước 2: Đổi DNS A record
# Bước 3: Đợi propagation (có thể mất 24-48h với một số ISP)
# Bước 4: Monitor traffic trên server cũ cho đến khi = 0
# Kiểm tra propagation
dig example.com @8.8.8.8 # Google DNS
dig example.com @1.1.1.1 # Cloudflare DNS
dig example.com @208.67.222.222 # OpenDNS
Testing Sau Migration: Checklist Verify
Sau khi switch, test kỹ lưỡng. Đây là checklist tôi dùng cho mọi migration:
Kiểm tra cơ bản
# 1. Trang chủ
curl -I https://example.com
# Kỳ vọng: 200, header có "LiteSpeed"
# 2. Trang con (permalink)
curl -I https://example.com/sample-page/
# Kỳ vọng: 200
# 3. WordPress admin
curl -I https://example.com/wp-admin/
# Kỳ vọng: 302 redirect đến login
# 4. wp-login.php
curl -I https://example.com/wp-login.php
# Kỳ vọng: 200
# 5. Static files
curl -I https://example.com/wp-content/uploads/2026/01/image.jpg
# Kỳ vọng: 200, cache headers có
# 6. 404 page
curl -I https://example.com/nonexistent-page-12345/
# Kỳ vọng: 404
# 7. Sitemap
curl -I https://example.com/sitemap_index.xml
# Kỳ vọng: 200
# 8. RSS feed
curl -I https://example.com/feed/
# Kỳ vọng: 200
# 9. robots.txt
curl -I https://example.com/robots.txt
# Kỳ vọng: 200
Kiểm tra SSL
# SSL certificate hợp lệ
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates -subject
# TLS version
openssl s_client -connect example.com:443 -tls1_3 </dev/null 2>/dev/null | grep "Protocol"
# HTTP → HTTPS redirect
curl -I http://example.com
# Kỳ vọng: 301 redirect đến https://
Kiểm tra chức năng WordPress
# 10. Form submit (contact form)
# Test manual qua browser
# 11. Comment
# Test manual qua browser
# 12. Search
curl -s "https://example.com/?s=test" | head -20
# Kỳ vọng: kết quả tìm kiếm
# 13. REST API
curl -I https://example.com/wp-json/wp/v2/posts
# Kỳ vọng: 200
# 14. Admin AJAX
curl -I https://example.com/wp-admin/admin-ajax.php
# Kỳ vọng: 200 (hoặc 400, không phải 500)
Kiểm tra WooCommerce (nếu có)
# Cart page
curl -I https://example.com/cart/
# Kỳ vọng: 200, KHÔNG cache (check header)
# Checkout page
curl -I https://example.com/checkout/
# Kỳ vọng: 200, KHÔNG cache
# My Account
curl -I https://example.com/my-account/
# Kỳ vọng: 200, KHÔNG cache
# Product page
curl -I https://example.com/product/sample-product/
# Kỳ vọng: 200, có thể cache
# API
curl -I https://example.com/wp-json/wc/v3/products
# Kỳ vọng: 401 (unauthorized, nhưng không phải 404 hay 500)
Kiểm tra performance
# TTFB
curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" https://example.com/
# So sánh trước/sau
# Lưu lại TTFB trước migration để so sánh
Checklist tổng hợp
- [ ] Trang chủ: 200 OK
- [ ] Trang con (permalink): 200 OK
- [ ] wp-admin: redirect hoặc 200
- [ ] wp-login.php: 200 OK
- [ ] Static files: 200 + cache headers
- [ ] 404 page: trả về 404
- [ ] SSL certificate hợp lệ
- [ ] HTTP redirect sang HTTPS
- [ ] TLS 1.3 hoạt động
- [ ] Sitemap: 200 OK
- [ ] robots.txt: 200 OK
- [ ] RSS feed: 200 OK
- [ ] REST API: 200 OK
- [ ] Search hoạt động
- [ ] Form submit hoạt động (test manual)
- [ ] Comment hoạt động (test manual)
- [ ] Payment flow hoạt động (nếu có)
- [ ] WooCommerce cart/checkout không bị cache
- [ ] TTFB so với trước migration
- [ ] Google PageSpeed kiểm tra
- [ ] Mobile responsiveness
- [ ] Tất cả redirects cũ vẫn hoạt động
Rollback Plan
Khi nào cần quay lại và làm thế nào.
Khi nào rollback
- TTFB tăng thay vì giảm — Có thể cấu hình chưa tối ưu hoặc conflict
- Trang trắng / 500 errors liên tục — Lỗi cấu hình nghiêm trọng
- WooCommerce broken — Cache cấu hình sai, khách không checkout được
- SSL lỗi — Certificate không load, browser warning
- Plugin xung đột không fix được trong 2 giờ — Không đáng để kéo dài
Rollback nhanh
# Nếu dùng iptables redirect (cách an toàn nhất):
sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -D PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
# Traffic quay về Nginx/Apache ngay lập tức. Zero data loss.
# Nếu đã dừng Nginx và đổi port:
# Dừng LiteSpeed
sudo systemctl stop lsws
# Khởi động lại Nginx/Apache
sudo systemctl start nginx
# Hoặc
sudo systemctl start apache2
# Verify
curl -I https://example.com
Khung thời gian quyết định
| Thời gian sau switch | Hành động |
|---|---|
| 0-15 phút | Monitor, fix minor issues |
| 15-60 phút | Nếu vẫn còn lỗi, quyết định fix tiếp hay rollback |
| 1-4 giờ | Nếu lỗi nghiêm trọng (payment, data), rollback ngay |
| 4-48 giờ | Monitor ổn định, giữ cấu hình cũ để backup |
| Sau 48 giờ | Xóa web server cũ nếu mọi thứ ổn |
Performance Comparison: Trước và Sau Migration
Dưới đây là benchmark thực tế từ một migration tôi thực hiện. Site WordPress, ~50k pageviews/tháng, VPS 2 vCPU / 4GB RAM.
Thông số test
- Server: Hetzner CX21 (2 vCPU, 4GB RAM)
- WordPress 6.7, PHP 8.3
- Theme: GeneratePress, 15 plugins active
- Test tool:
wrk -t4 -c100 -d30s https://example.com/
Kết quả
Trước (Nginx + FastCGI Cache):
Thread Stats Avg Stdev Max +/- Stdev
Latency 42ms 18ms 280ms 85%
Requests/sec: 2384
Transfer/sec: 8.2MB
Memory usage: 1.8GB (Nginx + PHP-FPM + MySQL)
TTFB avg: 85ms
Sau (OpenLiteSpeed + LSCache):
Thread Stats Avg Stdev Max +/- Stdev
Latency 18ms 7ms 120ms 90%
Requests/sec: 5840
Transfer/sec: 19.4MB
Memory usage: 1.2GB (OLS + LSAPI + MySQL)
TTFB avg: 32ms
So sánh
| Metric | Nginx + FastCGI | OpenLiteSpeed + LSCache | Thay đổi |
|---|---|---|---|
| Requests/sec | 2,384 | 5,840 | +145% |
| Avg latency | 42ms | 18ms | -57% |
| P99 latency | 280ms | 120ms | -57% |
| TTFB | 85ms | 32ms | -62% |
| Memory usage | 1.8GB | 1.2GB | -33% |
| CPU avg | 45% | 28% | -38% |
Con số nói lên tất cả. OpenLiteSpeed + LSCache nhanh hơn Nginx + FastCGI Cache ở mọi metric. Điểm khác biệt lớn nhất đến từ hai yếu tố:
- PHP LSAPI nhanh hơn PHP-FPM — LSAPI giữ PHP worker persistent, không cần spawn process mới mỗi request
- LSCache server-level — Cache nằm ở web server level, bỏ qua PHP hoàn toàn. FastCGI Cache của Nginx cũng server-level nhưng cấu hình phức tạp và dễ sai hơn
Benchmark chi tiết hơn cho các trường hợp khác (Apache, traffic cao, WooCommerce) có trong bài so sánh ban đầu.
Troubleshooting Migration Thường Gặp
1. 404 trên permalink WordPress
Nguyên nhân: Rewrite rules chưa đúng.
# Kiểm tra rewrite rules
# Admin Panel → Virtual Hosts → your-site → Rewrite
# Đảm bảo Enable Rewrite = Yes
# Kiểm tra .htaccess
cat /var/www/yoursite/public_html/.htaccess
# Nếu thiếu, tạo lại:
sudo -u www-data wp rewrite flush --path=/var/www/yoursite/public_html
# Restart LiteSpeed
sudo systemctl restart lsws
Nguyên nhân: PHP LSAPI chưa chạy hoặc chưa cấu hình đúng.
# Kiểm tra PHP LSAPI
/usr/local/lsws/lsphp83/bin/php -v
# Kiểm tra External App
# Admin Panel → Server → External App → lsphp
# Command phải đúng: lsphp83/bin/lsphp
# Kiểm tra log
sudo tail -50 /usr/local/lsws/logs/error.log
3. SSL certificate không load
# Kiểm tra certificate path
ls -la /etc/letsencrypt/live/example.com/
# Kiểm tra permission
sudo chmod 755 /etc/letsencrypt/live/
sudo chmod 755 /etc/letsencrypt/archive/
# Test certificate
openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -text | grep -E "Issuer|Not After"
4. Cache không hoạt động
# Kiểm tra LSCache plugin active
sudo -u www-data wp plugin list --status=active --path=/var/www/yoursite/public_html | grep litespeed
# Kiểm tra response headers
curl -I https://example.com | grep -i x-litespeed
# Phải thấy: X-LiteSpeed-Cache: hit (hoặc miss ở request đầu)
# Nếu luôn "miss":
# 1. Cookie có đang set cache-bypass?
# 2. Có rule exclude nào không?
# 3. Logged-in? (LiteSpeed không cache logged-in user)
5. .htaccess rules không hoạt động
# Kiểm tra Auto Load from .htaccess
# Admin Panel → Virtual Hosts → your-site → General
# → Enable Rewrite: Yes
# → Auto Load from .htaccess: Yes
# Nếu vẫn không: kiểm tra syntax .htaccess
/usr/local/lsws/bin/lswsctrl test
# Log chi tiết
sudo tail -f /usr/local/lsws/logs/error.log | grep -i rewrite
6. Memory usage cao bất thường
# Kiểm tra process
ps aux | grep lsphp | sort -k4 -rn | head
# Tối ưu PHP LSAPI
# Admin Panel → Server → External App → lsphp
# → Max Connections: giảm xuống (mặc định 35, thử 20 cho VPS nhỏ)
# → Environment: PHP_LSAPI_CHILDREN=5 (giảm nếu memory ít)
# → Memory Soft Limit: 512M
# → Memory Hard Limit: 768M
# Restart
sudo systemctl restart lsws
Xem thêm troubleshooting chi tiết khi traffic tăng trong bài monitoring & troubleshooting.
Tổng Kết Toàn Series OpenLiteSpeed
Đây là bài cuối cùng trong series OpenLiteSpeed cho WordPress. Hãy nhìn lại toàn bộ hành trình:
Bài 1 — OpenLiteSpeed vs Nginx vs Apache: So sánh ba web server phổ biến nhất, benchmark performance, khi nào nên chọn cái nào. Kết luận: cho WordPress, OpenLiteSpeed là lựa chọn tốt nhất trong đa số trường hợp.
Bài 2 — Cài đặt OpenLiteSpeed + WordPress: Hướng dẫn cài đặt từ A đến Z trên Ubuntu VPS. Cài OpenLiteSpeed, PHP LSAPI 8.3, MariaDB, WordPress, cấu hình Virtual Host và Admin Panel.
Bài 3 — LiteSpeed Cache WordPress: Cấu hình LSCache chi tiết, từng tab settings. TTFB giảm 92%, page load giảm 70%. So sánh với WP Super Cache, W3TC, WP Rocket.
Bài 4 — Tối ưu hình ảnh, CDN và database: WebP/AVIF tự động, Cloudflare + QUIC.cloud CDN, database cleanup định kỳ. PageSpeed 62 lên 94 mobile.
Bài 5 — SSL/HTTPS với Let’s Encrypt: Cài đặt SSL miễn phí, TLS 1.3, HSTS, OCSP Stapling, auto-renewal. Bảo mật transport layer hoàn chỉnh.
Bài 6 — Bảo mật WordPress + OpenLiteSpeed: Firewall, Fail2Ban, mod_security WAF, harden WordPress và LiteSpeed, malware scanning, backup tự động, AIDE intrusion detection.
Bài 7 — Monitoring & Troubleshooting: Real-time monitoring, log analysis, tối ưu khi traffic tăng, PHP/MySQL tuning, load testing, auto-scaling.
Bài 8 — Migration từ Nginx/Apache: Bạn đang ở đây. Chiến lược không downtime, convert config, testing, rollback.
Có được gì sau toàn bộ series?
Một website WordPress chạy trên OpenLiteSpeed với:
- TTFB dưới 50ms (thay vì 200ms+ trước đó)
- PageSpeed 90+ cả mobile lẫn desktop
- Bảo mật nhiều layer: firewall, WAF, fail2ban, malware scanning
- SSL tự động renewal, TLS 1.3
- Monitoring realtime, troubleshooting có sẵn playbook
- Khả năng chịu tải 3-5x so với Nginx/Apache trên cùng hardware
- Process migration không downtime
Ý Kiến Cá Nhân
Sau khi đã migrated khoảng hơn chục site từ Nginx và Apache sang OpenLiteSpeed trong 2 năm qua, đây là những gì tôi thực sự nghĩ:
Migration từ Apache dễ bất ngờ. .htaccess compatibility là vũ khí bí mật. Nếu site đang chạy Apache và bạn muốn tăng tốc, LiteSpeed là lựa chọn ít rủi ro nhất. Hầu như plug-and-play.
Migration từ Nginx cần công sức hơn nhưng đáng đồng tiền. Convert server blocks, rewrite rules, cache config — tất cả phải làm manual. Nhưng kết quả performance xứng đáng. Tôi chưa gặp trường hợp nào Nginx nhanh hơn LiteSpeed cho WordPress.
LSCache là lý do số 1 để migrate, không phải bản thân web server. Server-level cache của LiteSpeed kết hợp plugin WordPress tạo ra giải pháp cache hoàn chỉnh không đối thủ. WP Rocket trả phí $59/năm không bắt kịp LSCache miễn phí.
Admin Panel thay vì config file là lợi thế undervalued. Ban đầu tôi cũng thích config file như Nginx, cảm thấy “pro hơn”. Nhưng khi quản lý nhiều site, GUI tiết kiệm hàng giờ mỗi tuần. Đặc biệt khi cần debug cache issue, xem real-time stats, hoặc adjust settings nhanh.
Không phải ai cũng cần migrate. Nếu site đang chạy ổn, traffic thấp, response time đã tốt — đừng migrate chỉ vì “nghe nói LiteSpeed nhanh hơn”. Migrate khi có pain point cụ thể: traffic tăng, server quá tải, hoặc cache hiện tại phức tạp.
Rollback plan là mandatory, không phải optional. Tôi đã từng skip rollback plan vì “tự tin config đúng”. Kết quả: 2 giờ đêm khuya fix lỗi, khách phàn nàn. Luôn có rollback plan, luôn test kỹ, luôn giữ web server cũ ít nhất 48 giờ.
Nếu bạn đang cân nhắc migration, hy vọng series này cho bạn đủ thông tin để quyết định và đủ chi tiết để thực hiện. Mọi thắc mắc cứ để lại comment.