Hướng Dẫn Khắc Phục Sự Cố Máy Chủ Web ServBay
ServBay hỗ trợ các máy chủ Web phổ biến như Caddy, NGINX và Apache làm máy chủ mặc định, mang lại sự linh hoạt cho môi trường phát triển local của bạn. Trong quá trình sử dụng, bạn có thể gặp các sự cố như website không truy cập được, tải chậm hoặc xuất hiện thông báo lỗi (ví dụ lỗi 500 Internal Server Error). Hướng dẫn này sẽ giúp bạn chẩn đoán và khắc phục các lỗi máy chủ Web thường gặp trong môi trường ServBay.
Sử Dụng Công Cụ Chẩn Đoán Tích Hợp của ServBay
ServBay cung cấp một công cụ chẩn đoán sự cố mạnh mẽ giúp tự động kiểm tra và cảnh báo các vấn đề cấu hình và dịch vụ phổ biến. Khi gặp sự cố, bạn nên sử dụng công cụ này đầu tiên để tự kiểm tra.
Mở ứng dụng ServBay, nhấn vào mục Chẩn Đoán Sự Cố
ở thanh bên trái để vào giao diện công cụ chẩn đoán.
Công cụ này sẽ kiểm tra trạng thái các thành phần chính của ServBay, kiểm tra cổng bị chiếm dụng, lỗi cú pháp file cấu hình… và đưa ra các gợi ý giúp bạn xác định nhanh nguyên nhân.
Website Truy Cập Lần Đầu Chậm Sau Khi Chuyển Từ MAMP Hoặc Laravel Herd
Nếu bạn vừa chuyển từ MAMP hoặc Laravel Herd sang ServBay và nhận thấy website sau một thời gian không sử dụng sẽ truy cập lần đầu rất chậm (mất hơn 5 giây), còn các lần truy cập tiếp theo lại bình thường. Nếu tiếp tục để website "nghỉ" rồi truy cập lại lần đầu, tình trạng chậm này lại xuất hiện.
Triệu Chứng
Mở công cụ Developer Tools trong Chrome (nhấn F12
hoặc Cmd+Option+I
), chuyển sang tab Network, tải lại trang rồi nhấn vào một request để xem chi tiết Timing. Bạn sẽ thấy mục DNS Lookup mất khoảng 5 giây.
(Minh họa: Xem thời gian DNS Lookup trong tab Network của Chrome Developer Tools)
Nguyên Nhân
MAMP và Laravel Herd khi cài đặt sẽ tự động thay đổi cấu hình DNS của macOS, bằng cách tạo file cấu hình DNS đặc biệt để chiếm quyền phân giải một số tên miền (như *.test
, *.local
…). Các file này thường nằm tại thư mục /etc/resolver/
.
Ngay cả khi bạn đã gỡ cài đặt MAMP hoặc Laravel Herd, nhưng nếu các file cấu hình DNS này còn sót lại, macOS sẽ ưu tiên dùng chúng để phân giải tên miền có hậu tố giống nhau (ví dụ .test
). Do dịch vụ DNS của MAMP/Herd đã bị xóa, DNS query sẽ bị timeout (thường sau 5 giây), rồi mới quay lại dùng DNS mặc định của hệ thống.
Cách Khắc Phục
Hãy thực hiện các bước sau để dọn sạch mọi cấu hình DNS còn sót lại của MAMP hoặc Laravel Herd:
1. Gỡ Cài Đặt Đúng Cách MAMP Hoặc Laravel Herd
Nếu chưa gỡ hẳn MAMP hoặc Herd, hãy dùng trình gỡ cài đặt hoặc script chính thức:
Gỡ MAMP:
- Sử dụng tính năng gỡ cài đặt của ứng dụng MAMP
- Hoặc xóa thủ công thư mục
/Applications/MAMP
, rồi dọn thêm các file cấu hình liên quan
Gỡ Laravel Herd:
bash
# Sử dụng lệnh gỡ cài đặt Herd
herd uninstall
# Nếu lệnh trên không dùng được, xóa thủ công ứng dụng Herd và các file cấu hình
rm -rf ~/Library/Application\ Support/Herd
rm -rf ~/.config/herd
1
2
3
4
5
6
2
3
4
5
6
2. Xóa File Sót Lại Trong Thư Mục /etc/resolver
Dù gỡ cài đặt đầy đủ, các file cấu hình DNS trong /etc/resolver/
vẫn có thể tồn tại. Bạn nên xóa thủ công:
bash
# Hiển thị danh sách file trong thư mục /etc/resolver
ls -la /etc/resolver
# Xóa file cấu hình resolver cụ thể (như test hoặc local)
sudo rm /etc/resolver/test
sudo rm /etc/resolver/local
# Nếu còn file do MAMP/Herd tạo, cũng xóa hết
# Ví dụ: sudo rm /etc/resolver/herd
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Các file resolver thường gặp:
test
– phân giải cho tên miền*.test
local
– phân giải cho*.local
herd
– dùng riêng cho Laravel Herd
Lưu ý: Việc xóa file này cần quyền quản trị (dùng sudo
).
3. Hạn Chế Dùng Tên Miền *.local Cho Phát Triển Local
macOS dùng hậu tố *.local
cho dịch vụ mDNS nội bộ (Bonjour) trên mạng LAN. Nếu dùng .local
cho website phát triển local, bạn có thể gặp:
- Lỗi xung đột DNS
- Truy cập chậm
- Các hành vi mạng khó đoán
Khuyến nghị: Hãy dùng các hậu tố khác khi phát triển local, ví dụ:
.test
– chuyên dành cho thử nghiệm.localhost
– luôn phân giải về địa chỉ local.dev
– thật sự là một TLD, nhưng nhiều người dùng để phát triển local- Hoặc dùng hậu tố tuỳ chọn theo gợi ý của ServBay
4. Xóa Cache DNS (Tùy Chọn)
Sau khi thực hiện các bước trên, bạn nên xóa cache DNS để thay đổi có hiệu lực ngay:
bash
# macOS Big Sur (11) trở lên
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
# macOS Catalina (10.15) và cũ hơn
sudo killall -HUP mDNSResponder
1
2
3
4
5
2
3
4
5
5. Kiểm Tra Đã Khắc Phục Được Sự Cố
Sau khi dọn dẹp, truy cập lại website ServBay:
- Truy cập website local bằng trình duyệt
- Mở Chrome Developer Tools → tab Network
- Tải lại trang và xem mục Timing
- Đảm bảo thời gian DNS Lookup giảm xuống mức bình thường (thường dưới 50ms)
Nếu vẫn bị truy cập lần đầu chậm, hãy kiểm tra xem còn phần mềm nào (VPN, proxy…) làm ảnh hưởng việc phân giải DNS.
Kiểm Tra File Cấu Hình Máy Chủ Web
Lỗi cấu hình là nguyên nhân phổ biến khiến website không truy cập được. ServBay cung cấp công cụ kiểm tra cú pháp cho từng loại máy chủ.
Kiểm Tra Caddyfile
Dùng lệnh validate
tích hợp của Caddy để xác thực Caddyfile:
bash
# macOS
/Applications/ServBay/bin/caddy validate -c /Applications/ServBay/etc/caddy/Caddyfile
# Windows
C:\ServBay\bin\caddy.exe validate -c C:\ServBay\etc\caddy\Caddyfile
1
2
3
4
5
2
3
4
5
Nếu cú pháp chuẩn, sẽ trả về Valid configuration
. Nếu có lỗi, hệ thống sẽ hiển thị thông tin chi tiết về lỗi.
Lưu ý: Lệnh caddy validate
có thể xuất hiện nhiều thông báo INFO
hoặc WARN
, chúng chỉ là log nội bộ, không phải lỗi cú pháp, miễn là có dòng cuối Valid configuration
thì coi như hợp lệ.
Ví dụ Lỗi Caddyfile Thường Gặp:
Lỗi không tìm thấy file chứng chỉ:
bash# Ví dụ trên macOS 2024/12/09 17:24:16.970 INFO using config from file {"file": "/Applications/ServBay/etc/caddy/Caddyfile"} ... (các log INFO/WARN khác) ... Error: loading http app module: provision http: getting tls app: loading tls app module: provision tls: loading certificates: open /Applications/ServBay/ssl/private/tls-certs/mail.servbay.host/mail.servbay.host.1crt: no such file or directory # Ví dụ trên Windows 2024/12/09 17:24:16.970 INFO using config from file {"file": "C:\\ServBay\\etc\\caddy\\Caddyfile"} ... (các log INFO/WARN khác) ... Error: loading http app module: provision http: getting tls app: loading tls app module: provision tls: loading certificates: open C:\\ServBay\\ssl\\private\\tls-certs\\mail.servbay.host\\mail.servbay.host.1crt: no such file or directory
1
2
3
4
5
6
7
8
9Nếu thấy lỗi giống
loading certificates: open xxxxx: no such file or directory
, nghĩa là đường dẫn file chứng chỉ SSL trong Caddyfile bị sai hoặc file không tồn tại. Kiểm tra lại đường dẫn tới file chứng chỉ (.crt
,.cer
,.pem
) và private key (.key
). ServBay hỗ trợ import manual hoặc cấp phát SSL tự động qua ACME, hãy kiểm tra lại cấu hình SSL liên quan.Lỗi đường dẫn thư mục website (có dấu cách):
bash# Ví dụ trên macOS 2024/12/09 17:26:37.371 INFO using config from file {"file": "/Applications/ServBay/etc/caddy/Caddyfile"} Error: adapting config using caddyfile: parsing caddyfile tokens for 'root': too many arguments; should only be a matcher and a path, at /Applications/ServBay/etc/caddy/Caddyfile:1388 # Ví dụ trên Windows 2024/12/09 17:26:37.371 INFO using config from file {"file": "C:\\ServBay\\etc\\caddy\\Caddyfile"} Error: adapting config using caddyfile: parsing caddyfile tokens for 'root': too many arguments; should only be a matcher and a path, at C:\\ServBay\\etc\\caddy\\Caddyfile:1388
1
2
3
4
5
6
7Lỗi này (parsing caddyfile tokens for 'root': too many arguments) thường do đường dẫn folder chứa dấu cách. Ví dụ:
- macOS:
root * /Applications/ServBay/www/public web
(public web
thành 2 tham số riêng biệt) - Windows:
root * C:\ServBay\www\public web
Cách đúng là dùng dấu ngoặc kép
" "
bao quanh đường dẫn:- macOS:
root * "/Applications/ServBay/www/public web"
- Windows:
root * "C:\ServBay\www\public web"
Khuyên dùng: Đặt tên file/folder không chứa dấu cách hoặc ký tự đặc biệt. Dùng dấu nối
-
hoặc dấu gạch dưới_
ví dụ:public-folder
,public_dir
.- macOS:
Lỗi rewrite rule:
Nếu dùng rule rewrite trong Caddyfile mà không đúng cú pháp Caddy (ví dụ copy nguyên rule NGINX), sẽ bị báo lỗi. Tham khảo tài liệu Caddy Rewrite module hoặc hướng dẫn chuyển website NGINX sang ServBay để chỉnh lại cú pháp cho chuẩn.
Kiểm Tra Cấu Hình NGINX
Sử dụng tham số -t
của NGINX để kiểm tra cú pháp và hợp lệ của file cấu hình.
bash
# macOS
/Applications/ServBay/bin/nginx -t
# Windows
C:\ServBay\bin\nginx.exe -t
1
2
3
4
5
2
3
4
5
Nếu cấu hình chuẩn, sẽ trả về:
# macOS
nginx: the configuration file /Applications/ServBay/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /Applications/ServBay/etc/nginx/nginx.conf test is successful
# Windows
nginx: the configuration file C:\ServBay\etc\nginx\nginx.conf syntax is ok
nginx: configuration file C:\ServBay\etc\nginx\nginx.conf test is successful
1
2
3
4
5
6
7
2
3
4
5
6
7
Nếu sai, NGINX sẽ báo vị trí lỗi trên file, số dòng. Các lỗi thường gặp:
- Lỗi cú pháp: thiếu dấu chấm phẩy
;
, ngoặc{}
không khớp… - Lỗi đường dẫn file: lệnh
include
hoặc path khác bị sai hoặc không tồn tại. - Xung đột port: port đã bị chương trình khác chiếm dụng.
Kiểm Tra Cấu Hình Apache
Dùng lệnh apachectl configtest
để kiểm tra cú pháp cấu hình Apache.
bash
# macOS
/Applications/ServBay/bin/apachectl configtest
# Windows
C:\ServBay\bin\httpd.exe -t
1
2
3
4
5
2
3
4
5
Nếu chuẩn, hiển thị Syntax OK
. Nếu không, báo chi tiết lỗi. Các lỗi phổ biến gồm:
- Không load được module: lệnh
LoadModule
bị sai hoặc file không tồn tại. - Lỗi cú pháp file .htaccess: nếu có file
.htaccess
với cú pháp sai; có thể khiến toàn bộ server lỗi hoặc thư mục cụ thể không truy cập được. - Thiết lập quyền folder lỗi: lệnh
Directory
hoặcFiles
dùng quyền (Require
,Allow
,Deny
) chặn truy cập file website.
Xử Lý Lỗi 500 Internal Server Error
500 Internal Server Error là mã trạng thái HTTP thường dùng, báo server gặp vấn đề bất ngờ khi xử lý request. Nếu gặp lỗi này, backend (PHP, Python, Node.js…) thường bị crash.
Các Bước Khắc Phục Chung
Gặp lỗi 500, hãy thực hiện các bước sau:
Kiểm Tra Log Lỗi của Máy Chủ Web: Đây là bước đầu tiên khi xử lý lỗi 500. Log lỗi thường ghi chi tiết lỗi: file không tồn tại, sai permission, lỗi script…
Trên macOS:
- Caddy:
/Applications/ServBay/var/logs/caddy/error.log
- NGINX:
/Applications/ServBay/var/logs/nginx/error.log
- Apache:
/Applications/ServBay/var/logs/apache/error.log
Trên Windows:
- Caddy:
C:\ServBay\var\logs\caddy\error.log
- NGINX:
C:\ServBay\var\logs\nginx\error.log
- Apache:
C:\ServBay\var\logs\apache\error.log
Tìm các dòng gần nhất chứa
error
hoặccritical
.- Caddy:
Kiểm Tra Backend (PHP-FPM) Đã Chạy Chưa: Nếu site dùng PHP, kiểm tra PHP-FPM đang chạy chưa.
bashps aux | grep php-fpm
1Tìm dòng chứa
php-fpm: master process
hoặcphp-fpm: pool www
. Nếu không có, PHP-FPM đang ngừng hoặc bị crash. Khởi động lại qua UI ServBay hoặc lệnhservbayctl
.Kiểm Tra Log Lỗi của Backend (PHP): Nếu log của web server báo lỗi FastCGI/script, kiểm tra log lỗi của ngôn ngữ lập trình backend.
Log lỗi PHP thường đặt tại:
- macOS:
/Applications/ServBay/var/logs/php/php_error.log
- Windows:
C:\ServBay\var\logs\php\php_error.log
Xem các lỗi kiểu
Fatal error
,Parse error
,Warning
,Notice
, đặc biệt liên quan tới file đang truy cập. Đảm bảodisplay_errors
OFF với môi trường sản xuất, còn khi dev có thể ON để debug chi tiết (sửa trongphp.ini
).- macOS:
Kiểm Tra Quyền File/Folder: Process của web server (người dùng
_www
hoặc khác) cần quyền đọc folder/file web, quyền ghi cho folder upload/log.Trên macOS:
bashls -la /Applications/ServBay/www/your-site/
1Đảm bảo user web server (
_www
…) được quyền đọc và, nếu cần, quyền ghi. Chỉnh bằng lệnhchmod
,chown
(permission và owner).Trên Windows:
cmddir C:\ServBay\www\your-site
1Đảm bảo user chạy ServBay có quyền truy cập folder web. Kiểm tra/cấp quyền qua tab
Security
của Properties.
Các Lưu Ý Riêng Từng Máy Chủ Web Khi Lỗi 500
Caddy:
- Cấu hình FastCGI: Kiểm tra trong Caddyfile, lệnh
php_fastcgi
hoặcreverse_proxy
chỉ đúng tới địa chỉ PHP-FPM (thường là127.0.0.1:9000
hoặc dạngunix:/path/to/php-fpm.sock
). - PHP-FPM: Đảm bảo PHP version chọn đúng, PHP-FPM bật.
- Reverse Proxy: Nếu dùng
reverse_proxy
cho backend khác (Node.js…), kiểm tra địa chỉ/port backend đúng và dịch vụ đó có chạy không.
- Cấu hình FastCGI: Kiểm tra trong Caddyfile, lệnh
NGINX:
- Cấu hình
fastcgi_pass
: Kiểm tra trong filenginx.conf
hay site config, đường dẫn củafastcgi_pass
đúng địa chỉ PHP-FPM. - Cài đặt
client_max_body_size
: Nếu upload file lớn bị lỗi 500, có thể do giá trị này quá nhỏ. - Lệnh
try_files
: Đảm bảo rewrite đúng và chuyển request sang FastCGI khi file không tồn tại.
- Cấu hình
Apache:
- Module
mod_rewrite
: Nếu dùng.htaccess
rewrite, phải bật module này cho Apache. - Nội dung file .htaccess: Lỗi trong file này sẽ gây lỗi 500. Kiểm tra lại rule rewrite.
- Thiết lập
AllowOverride
: Trong file cấu hình, phải cho phép các chỉ thị.htaccess
hoạt động (All
, hoặc ít nhất làFileInfo
,Limit
).
- Module
Quản Lý Dịch Vụ
Sau khi sửa file cấu hình hoặc khắc phục backend, cần khởi động lại dịch vụ để áp dụng thay đổi.
Khởi Động Lại Dịch Vụ
Dùng lệnh servbayctl restart
để khởi động lại dịch vụ máy chủ web:
bash
# Khởi động lại dịch vụ Caddy
servbayctl restart caddy -all
# Khởi động lại dịch vụ NGINX
servbayctl restart nginx -all
# Khởi động lại dịch vụ Apache
servbayctl restart apache -all
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Tham số -all
sẽ tự động khởi động lại thêm các dịch vụ liên quan (ví dụ FastCGI, PHP-FPM…).
Kiểm Tra Trạng Thái Dịch Vụ
Dùng lệnh servbayctl status
để xem trạng thái dịch vụ:
bash
# Kiểm tra Caddy
servbayctl status caddy -all
# Kiểm tra NGINX
servbayctl status nginx -all
# Kiểm tra Apache
servbayctl status apache -all
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Lệnh sẽ báo trạng thái: running
(đang chạy), stopped
(đã dừng) hoặc khác. Giúp xác định dịch vụ đã bật thành công.
Các Bước Khắc Phục Nâng Cao
Nếu mọi cách trên đều không hiệu quả, thử thêm các phương pháp sau:
- Sử dụng Developer Tools trên trình duyệt: Nhấn F12, kiểm tra tab
Console
vàNetwork
để biết lỗi JS, trạng thái request, header, body…, từ đó xác định lỗi ở frontend hay backend. - Dùng lệnh
curl -v
: Chạy lệnhcurl -v your-website.servbay.demo
trong terminal. Thông tin chi tiết sẽ hiện request, response, kết nối SSL/TLS… rất hữu ích khi debug kết nối. Thayyour-website.servbay.demo
bằng tên miền thực tế đang dùng. - Tạm thời tắt firewall: Có thể firewall local, hoặc phần mềm bảo mật bên thứ ba, chặn kết nối vào. Tắt tạm để test nếu website chạy lại thì cần điều chỉnh rule cho các port cần thiết (80, 443…).
- Thử trên trình duyệt/thiết bị khác: Để loại trừ lỗi do browser cache, cấu hình thiết bị… hãy test trên nhiều trình duyệt hoặc máy khác.
- Kiểm tra cấu hình DNS/hosts local: Nếu dùng domain tuỳ chỉnh (không phải localhost hoặc IP), kiểm tra file hosts hoặc DNS local coi domain đã trỏ đúng 127.0.0.1 hoặc ::1 chưa.
- macOS:
/etc/hosts
- Windows:
C:\Windows\System32\drivers\etc\hosts
- macOS:
Tổng Kết
Lỗi máy chủ Web là khó tránh trong quá trình phát triển local. Nếu kiểm tra hệ thống các bước như file cấu hình, log lỗi, trạng thái dịch vụ và quyền file, hầu hết sự cố đều có thể xử lý được. Công cụ chẩn đoán và các lệnh dòng lệnh ServBayctl cực kỳ hữu hiệu. Nếu gặp tình trạng phức tạp, đừng ngần ngại xem thêm tài liệu ServBay hoặc liên hệ bộ phận kỹ thuật để được hỗ trợ.