19/09/2018, 09:47

Làm thế nào để cấu hình Apache để sử dụng trang lỗi tùy chỉnh trên Ubuntu 14.04

Giới thiệu Apache là máy chủ web phổ biến nhất trên thế giới. Nó được hỗ trợ tốt, giàu tính năng và linh hoạt. Khi thiết kế trang web của bạn, thường hữu ích khi tùy chỉnh mọi phần nội dung mà người dùng 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 ...

Giới thiệu

Apache là máy chủ web phổ biến nhất trên thế giới. Nó được hỗ trợ tốt, giàu tính năng và linh hoạt. Khi thiết kế trang web của bạn, thường hữu ích khi tùy chỉnh mọi phần nội dung mà người dùng 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, chúng tôi 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.

Điều kiện tiên quyết

Để bắt đầu với hướng dẫn này, bạn sẽ cần một người dùng không phải root với sudo đặc quyền. Bạn có thể thiết lập người dùng thuộc loại này bằng cách làm theo cùng với hướng dẫn thiết lập ban đầu cho Ubuntu 14.04. Bạn cũng sẽ cần phải cài đặt Apache trên hệ thống của bạn. Tìm hiểu cách thiết lập điều này bằng cách làm 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

Chúng tôi sẽ tạo một vài trang lỗi tùy chỉnh cho mục đích trình diễn, nhưng các trang tùy chỉnh của bạn rõ ràng sẽ khác nhau.

Chúng tôi sẽ đặt các trang lỗi tùy chỉnh của chúng tôi trong /var/www/html thư mục nơi cài đặt Apache của Ubuntu đặt gốc tài liệu mặc định của nó. Chúng tôi sẽ tạo một trang cho các lỗi 404 được gọi là custom_404.html và một cho các lỗi 500 cấp độ 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 riêng bạn ở các 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ờ chúng tôi có hai trang lỗi tùy chỉnh mà chúng tôi có thể phân phát khi yêu cầu của khách hàng 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ờ, chúng ta chỉ cần nói với Apache rằng nó nên được sử dụng các trang này bất cứ khi nào các điều kiện lỗi chính xác xảy ra. Mở tệp máy chủ ảo trong /etc/apache2/sites-enabled thư mục mà bạn muốn cấu hình. Chúng tôi sẽ sử dụng tệp chặn máy chủ mặc định được gọi là 000-default.confnhưng bạn nên điều chỉnh các khối máy chủ của riêng mình nếu bạn đang sử dụng tệp không phải mặc định:

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

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

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

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

Đối với ví dụ của chúng tôi, á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 đủ để phục vụ các trang lỗi tùy chỉnh khi xảy ra lỗi được chỉ định.

Tuy nhiên, chúng tôi sẽ thêm một bộ cấu hình bổ sung để khách hàng không thể yêu cầu các trang lỗi của chúng tôi trực tiếp. Điều này có thể ngăn chặn một số tình huống lạ khi văn bản của trang tham chiếu 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 404 khi trang lỗi được yêu cầu trực tiếp

Để thực hiện hành vi này, chúng tôi sẽ cần phải thêm Files chặn cho từng trang tùy chỉnh của chúng tôi. Bên trong, chúng ta có thể kiểm tra xem liệu REDIRECT_STATUS biến môi trường được thiết lập. Điều này chỉ nên được đặt khi ErrorDocument chỉ thị xử lý yêu cầu. Nếu biến môi trường trống, chúng tôi sẽ phân phát 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 yêu cầu trực tiếp bởi khách hàng, lỗi 404 sẽ xảy ra do biến môi trường chính xác không được đặt.

Thiết lập kiểm tra lỗi 500 cấp

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

Thêm một ProxyPass chỉ thị đến dưới cùng của máy chủ ảo. Gửi yêu cầu cho /proxytest đến cổng 9000 trên máy cục bộ (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 và đóng tệp khi bạn hoàn tất.

Bây giờ, hãy bật mod_proxy và mod_proxy_http mô-đun bằng cách gõ:

sudo a2enmod proxy

sudo a2enmod proxy_http

Khởi động lại Apache và kiểm tra các trang của bạn

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

sudo apache2ctl configtest

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

sudo service apache2 restart

Bây giờ, khi bạn đi đến miền hoặc địa chỉ IP của máy chủ của bạn và yêu cầu một tệp không tồn tại, bạn sẽ thấy trang 404 mà chúng tôi đã thiết lập:

http://server_domain_or_IP/thiswillerror

apache custom 404

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

http://server_domain_or_IP/proxytest

apache custom 50x

Bây giờ bạn có thể quay trở lại và loại bỏ đường truyền proxy giả từ cấu hình Apache của bạn. Bạn có thể vô hiệu hóa các mô-đun 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 máy chủ để thực hiện những thay đổi đó:

sudo service apache2 restart

Phần kết luận

Bây giờ bạn sẽ được phục vụ 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 người dùng ngay cả khi họ gặp sự cố. Một đề xuất cho các trang này là bao gồm các liên kết đến các vị trí nơi họ có thể truy cập để 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 rằng 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.

0