Thứ ba, 09/06/2015 | 00:00 GMT+7

Cách cấu hình Apache để sử dụng các trang lỗi tùy chỉnh trên Ubuntu 14.04

Apache là web server phổ biến nhất trên thế giới. Nó được hỗ trợ tốt, nhiều tính năng và linh hoạt. Khi thiết kế các trang web , điều hữu ích là tùy chỉnh mọi phần nội dung mà user của bạn sẽ thấy. Điều này bao gồm các trang lỗi khi họ yêu cầu nội dung không có sẵn. Trong hướng dẫn này, ta sẽ trình bày cách cấu hình Apache để sử dụng các trang lỗi tùy chỉnh trên Ubuntu 14.04.

Yêu cầu

Để bắt đầu với hướng dẫn này, bạn cần một user không phải root có quyền sudo . Bạn có thể cài đặt user thuộc loại này theo hướng dẫn cài đặt ban đầu của ta cho Ubuntu 14.04 . Bạn cũng cần phải cài đặt Apache trên hệ thống của bạn . Tìm hiểu cách cài đặt điều này theo bước đầu tiên của hướng dẫn này .

Tạo các trang lỗi tùy chỉnh của bạn

Ta sẽ tạo một vài trang lỗi tùy chỉnh cho mục đích demo , nhưng các trang tùy chỉnh của bạn rõ ràng sẽ khác.

Ta sẽ đặt các trang lỗi tùy chỉnh của ta trong folder /var/www/html nơi cài đặt Apache của Ubuntu đặt root tài liệu mặc định của nó. Ta sẽ tạo một trang cho các lỗi 404 được gọi là custom_404.html và một trang cho các lỗi cấp 500 chung được gọi là custom_50x.html . Bạn có thể sử dụng các dòng sau nếu bạn chỉ đang thử nghiệm. Nếu không, hãy đặt nội dung của bạn ở những vị trí sau:

  • 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

Bây giờ ta có hai trang lỗi tùy chỉnh mà ta có thể phục vụ khi khách hàng yêu cầu dẫn đến các lỗi khác nhau.

Cấu hình Apache để sử dụng các trang lỗi của bạn

Bây giờ, ta chỉ cần nói với Apache rằng nó nên sử dụng các trang này khi nào các điều kiện lỗi chính xác xảy ra. Mở file server ảo trong folder /etc/apache2/sites-enabled mà bạn muốn cấu hình . Ta sẽ sử dụng file khối server mặc định có tên 000-default.conf , nhưng bạn nên điều chỉnh các khối server của riêng mình nếu bạn đang sử dụng file không phải mặc định:

  • sudo nano /etc/apache2/sites-enabled/000-default.conf

Bây giờ ta có thể trỏ Apache đến các trang lỗi tùy chỉnh của ta .

Lỗi trực tiếp đến các trang tùy chỉnh chính xác

Ta có thể sử dụng chỉ thị ErrorDocument để liên kết từng loại lỗi với một trang lỗi liên quan. Điều này có thể được đặt trong server ảo hiện đã được xác định. Về cơ bản, ta chỉ cần ánh xạ mã trạng thái http cho mỗi lỗi đến trang ta muốn phục vụ khi nó xảy ra.

Đối với ví dụ của ta , ánh xạ lỗi sẽ giống như sau:

/etc/apache2/sites-enabled/000-default.conf
<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> 

Chỉ riêng thay đổi này là đủ để phục vụ các trang lỗi tùy chỉnh khi các lỗi được chỉ định xảy ra.

Tuy nhiên, ta sẽ thêm một bộ cấu hình bổ sung để khách hàng không thể yêu cầu trực tiếp các trang lỗi của ta . Điều này có thể ngăn ngừa một số trường hợp kỳ lạ trong đó văn bản của trang tham chiếu đến lỗi, nhưng trạng thái http là “200” (cho biết yêu cầu thành công).

Trả lời với 404 khi các trang lỗi được yêu cầu trực tiếp

Để thực hiện hành vi này, ta cần thêm khối Files cho mỗi trang tùy chỉnh của bạn . Bên trong, ta có thể kiểm tra xem biến môi trường REDIRECT_STATUS có được đặt hay không. Điều này chỉ nên được đặt khi chỉ thị ErrorDocument xử lý một yêu cầu. Nếu biến môi trường trống, ta sẽ đưa ra lỗi 404:

/etc/apache2/sites-enabled/000-default.conf
<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 các trang lỗi được khách hàng yêu cầu trực tiếp, lỗi 404 sẽ xảy ra do biến môi trường chính xác không được đặt.

Cài đặt kiểm tra lỗi 500 cấp độ

Ta có thể dễ dàng tạo ra lỗi 404 để kiểm tra cấu hình của bạn bằng cách yêu cầu nội dung không tồn tại. Để kiểm tra lỗi cấp 500, ta sẽ phải cài đặt một thẻ proxy giả để có thể đảm bảo các trang chính xác được trả lại.

Thêm chỉ thị ProxyPass vào cuối server ảo. Gửi yêu cầu /proxytest đến cổng 9000 trên máy local (nơi không có dịch vụ nào đang chạy):

/etc/apache2/sites-enabled/000-default.conf
<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>      ProxyPass /proxytest "http://localhost:9000" </VirtualHost> 

Lưu file khi bạn hoàn tất.

Bây giờ, kích hoạt mod_proxymod_proxy_http module bằng lệnh :

  • sudo a2enmod proxy
  • sudo a2enmod proxy_http

Khởi động lại Apache và kiểm tra các trang web

Kiểm tra file cấu hình của bạn để tìm lỗi cú pháp bằng lệnh :

  • sudo apache2ctl configtest

Giải quyết bất kỳ vấn đề nào được báo cáo. Khi file của bạn không có lỗi cú pháp, hãy khởi động lại Apache bằng lệnh :

  • sudo service apache2 restart

Bây giờ, khi bạn truy cập domain hoặc địa chỉ IP của server và yêu cầu file không tồn tại, bạn sẽ thấy trang 404 mà ta cài đặt :

http://server_domain_or_IP/thiswillerror 

apache tùy chỉnh 404

Khi bạn đi đến vị trí mà ta cài đặt cho thẻ proxy giả, ta sẽ nhận được lỗi "dịch vụ 503 không khả dụng" với trang 500 cấp tùy chỉnh của ta :

http://server_domain_or_IP/proxytest 

apache tùy chỉnh 50x

Đến đây bạn có thể quay lại và xóa dòng chuyển proxy giả khỏi cấu hình Apache của bạn . Bạn có thể tắt các module proxy nếu bạn không cần sử dụng chúng ở nơi khác:

  • sudo a2dismod proxy
  • sudo a2dismod proxy_http

Khởi động lại server để thực hiện những thay đổi đó:

  • sudo service apache2 restart

Kết luận

Đến đây bạn sẽ cung cấp các trang lỗi tùy chỉnh cho trang web của bạn . Đây là một cách dễ dàng để cá nhân hóa trải nghiệm của user ngay cả khi họ đang gặp sự cố. Một gợi ý cho các trang này là bao gồm các liên kết đến các vị trí mà họ có thể đến để nhận trợ giúp hoặc biết thêm thông tin. Nếu bạn làm điều này, hãy đảm bảo các đích liên kết có thể truy cập được ngay cả khi các lỗi liên quan đang xảy ra.


Tags:

Các tin liên quan

Cách cấu hình Apache để sử dụng các trang lỗi tùy chỉnh trên CentOS 7
2015-06-09
Cách thiết lập ModSecurity với Apache trên Ubuntu 14.04 và Debian 8
2015-06-05
Cách chạy trang web Django với Apache, mod_wsgi và MySQL trên FreeBSD 10.1
2015-05-29
Cách chuyển hướng www thành không có www bằng Apache trên Ubuntu 14.04
2015-05-04
Cách chuyển hướng www thành không có www bằng Apache trên CentOS 7
2015-05-04
Cách thiết lập server Apache, MySQL và Python (LAMP) mà không cần khung trên Ubuntu 14.04
2015-04-29
Cách cấu hình bộ đệm nội dung Apache trên CentOS 7
2015-04-13
Cách cấu hình bộ đệm nội dung Apache trên Ubuntu 14.04
2015-04-10
Cách cài đặt database Apache Accumulo NoSQL thân thiện với dữ liệu lớn trên Ubuntu 14.04
2015-03-19
Cách cung cấp các ứng dụng Django với Apache và mod_wsgi trên CentOS 7
2015-03-19