Apache là máy chủ web được sử dụng nhiều nhất trên thế giới. Nó được hỗ trợ tốt, đầy đủ tính năng và rất linh hoạt. Khi thiết kế trang web của bạn, việc tùy chỉnh từng mảnh nội dung mà người dùng sẽ thấy luôn hữu ích – bao gồm cả các trang lỗi khi họ yêu cầu nội dung không tồn tại. Trong hướng dẫn này, chúng ta sẽ cùng nhau cấu hình Apache sử dụng các trang lỗi tùy chỉnh trên Ubuntu 14.04.
Nếu bạn đang tìm một máy chủ ảo để triển khai website với Apache, hãy tham khảo các giải pháp VPS giá rẻ của chúng tôi – phù hợp cho cá nhân và doanh nghiệp nhỏ với chi phí tiết kiệm và hiệu suất ổn định.
Yêu cầu tiên quyết
Để bắt đầu với hướng dẫn này, bạn cần có một người dùng không phải root với quyền sudo. Bạn có thể thiết lập một người dùng kiểu này theo hướng dẫn thiết lập ban đầu cho Ubuntu 14.04.
Ngoài ra, hệ thống của bạn cần phải cài đặt Apache. Hãy làm theo bước đầu tiên của hướng dẫn này để cài đặt Apache.
Tạo trang lỗi tùy chỉnh của bạn
Chúng ta sẽ tạo một số trang lỗi tùy chỉnh để làm ví dụ, mặc dù các trang lỗi của bạn có thể khác hoàn toàn.
Chúng ta sẽ đặt các trang lỗi tùy chỉnh vào thư mục /var/www/html
– nơi mà cài đặt Apache mặc định trên Ubuntu đặt document root.
-
Trang lỗi cho mã 404 sẽ có tên custom_404.html
-
Trang lỗi cho các lỗi cấp 500 (500-level) sẽ có tên custom_50x.html
Nếu bạn chỉ đang thử nghiệm, hãy sử dụng các lệnh sau. Nếu không, hãy thay thế nội dung bằng của bạn tại các vị trí này:
echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /var/www/html/custom_404.html echo "<p>I have no idea where that file is, sorry. Are you sure you typed in the correct URL?</p>" | sudo tee -a /var/www/html/custom_404.html echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /var/www/html/custom_50x.html echo "<p>We seem to be having some technical difficulties. Hang tight.</p>" | sudo tee -a /var/www/html/custom_50x.html
Lưu ý: Sau khi chạy các lệnh trên, bạn đã có hai trang lỗi tùy chỉnh để phục vụ cho các lỗi khác nhau phát sinh từ yêu cầu của client.
Cấu hình Apache sử dụng trang lỗi của bạn
Bây giờ, bạn chỉ cần thông báo cho Apache sử dụng các trang lỗi này mỗi khi gặp điều kiện lỗi phù hợp. Mở tệp Virtual Host trong thư mục /etc/apache2/sites-enabled
mà bạn muốn cấu hình. Ở đây, chúng ta sử dụng tệp cấu hình mặc định có tên 000-default.conf; nếu bạn sử dụng tệp khác, hãy điều chỉnh tương ứng.
Chỉ định lỗi chuyển hướng đến trang lỗi tùy chỉnh
Bạn có thể sử dụng chỉ thị ErrorDocument để ánh xạ từng mã lỗi HTTP với trang lỗi tương ứng. Chỉ thị này được đặt trong Virtual Host hiện có. Cơ bản, bạn chỉ cần ánh xạ mã lỗi với trang bạn muốn hiển thị khi lỗi đó xảy ra.
Ví dụ, ánh xạ lỗi sẽ trông như sau:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ErrorDocument 404 /custom_404.html ErrorDocument 500 /custom_50x.html ErrorDocument 502 /custom_50x.html ErrorDocument 503 /custom_50x.html ErrorDocument 504 /custom_50x.html </VirtualHost>
Với thay đổi này, Apache sẽ phục vụ trang lỗi tùy chỉnh khi các lỗi đã chỉ định xảy ra.
Ngăn chặn truy cập trực tiếp vào trang lỗi
Để tránh trường hợp lạ khi nội dung trang lỗi được tham chiếu nhưng HTTP status lại trả về “200” (yêu cầu thành công), chúng ta sẽ thêm cấu hình bổ sung để các trang lỗi không thể được truy cập trực tiếp bởi client.
Phản hồi 404 khi trang lỗi được yêu cầu trực tiếp
Chúng ta sẽ thêm một khối Files cho từng trang lỗi tùy chỉnh. Bên trong khối này, kiểm tra xem biến môi trường REDIRECT_STATUS có được đặt hay không. Biến này chỉ có giá trị khi chỉ thị ErrorDocument xử lý yêu cầu. Nếu biến môi trường không có giá trị, trả về lỗi 404:
<VirtualHost *:80> . . . ErrorDocument 404 /custom_404.html ErrorDocument 500 /custom_50x.html ErrorDocument 502 /custom_50x.html ErrorDocument 503 /custom_50x.html ErrorDocument 504 /custom_50x.html <Files "custom_404.html"> <If "-z %{ENV:REDIRECT_STATUS}"> RedirectMatch 404 ^/custom_404.html$ </If> </Files> <Files "custom_50x.html"> <If "-z %{ENV:REDIRECT_STATUS}"> RedirectMatch 404 ^/custom_50x.html$ </If> </Files> </VirtualHost>
Khi client cố truy cập trực tiếp vào trang lỗi, một lỗi 404 sẽ được trả về vì biến môi trường REDIRECT_STATUS không được đặt.
Thiết lập kiểm tra lỗi cấp 500
Để kiểm tra lỗi 404, bạn có thể yêu cầu nội dung không tồn tại. Để kiểm tra lỗi cấp 500, chúng ta sẽ thiết lập một proxy pass giả để đảm bảo các trang lỗi được trả về chính xác.
Thêm chỉ thị ProxyPass vào cuối Virtual Host. Chuyển hướng các yêu cầu đến /proxytest
sang cổng 9000 trên máy cục bộ (nơi không có dịch vụ chạy):
Lưu và đóng tệp cấu hình sau khi chỉnh sửa.
Tiếp theo, bật các module mod_proxy và mod_proxy_http:
sudo a2enmod proxy sudo a2enmod proxy_http
Kiểm tra tệp cấu hình của bạn có lỗi cú pháp bằng lệnh:
Nếu có bất kỳ vấn đề nào được báo cáo, hãy khắc phục chúng. Khi tệp của bạn không còn lỗi cú pháp, khởi động lại Apache:
sudo service apache2 restart
-
Ví dụ:
http://server_domain_or_IP/thiswillerror
Khi truy cập vào đường dẫn cấu hình cho proxy pass giả, bạn sẽ nhận được lỗi “503 service unavailable” cùng với trang lỗi cấp 500 tùy chỉnh:
-
Ví dụ:
http://server_domain_or_IP/proxytest
Sau khi kiểm tra xong, bạn có thể xóa dòng proxy pass giả khỏi cấu hình Apache. Nếu bạn không cần sử dụng các module proxy ở nơi khác, bạn có thể tắt chúng:
Khởi động lại server lần nữa để áp dụng thay đổi:
sudo service apache2 restart
Bây giờ, bạn đã cấu hình thành công Apache để phục vụ các trang lỗi tùy chỉnh cho trang web của mình. Đây là một cách đơn giản nhưng hiệu quả để cá nhân hóa trải nghiệm của người dùng ngay cả khi họ gặp sự cố. Một gợi ý cho các trang lỗi này là bao gồm các liên kết đến những địa chỉ mà người dùng có thể truy cập để nhận được sự trợ giúp hoặc thêm thông tin. Nếu làm như vậy, hãy đảm bảo rằng các liên kết đó vẫn khả dụng ngay cả khi xảy ra lỗi liên quan.
Trong quá trình tùy chỉnh máy chủ web, việc thuê VPS giúp bạn linh hoạt cấu hình và kiểm soát môi trường tốt hơn. Xem ngay các gói thuê VPS tối ưu hiệu suất cho nhu cầu của bạn.