19/09/2018, 09:51

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

Giới thiệu Nginx là một máy chủ web hiệu suất cao có khả năng phục vụ nội dung với tính linh hoạt và sức mạnh. 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

Nginx là một máy chủ web hiệu suất cao có khả năng phục vụ nội dung với tính linh hoạt và sức mạnh. 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 Nginx sử dụng các trang lỗi tùy chỉnh trên CentOS 7.

Đ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 CentOS 7. Bạn cũng sẽ cần phải cài đặt Nginx trên hệ thống của bạn. Tìm hiểu cách thiết lập bằng cách theo dõi 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 /usr/share/nginx/html thư mục nơi Nginx của CentOS đặ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 /usr/share/nginx/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 /usr/share/nginx/html/custom_404.html

echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /usr/share/nginx/html/custom_50x.html

echo "<p>We seem to be having some technical difficulties. Hang tight.</p>" | sudo tee -a /usr/share/nginx/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 Nginx để 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 Nginx 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. Chúng tôi sẽ cần điều chỉnh các khối máy chủ của chúng tôi. Trên CentOS 7, khối máy chủ chính nằm trong /etc/nginx/nginx.conf tập tin. Chúng tôi sẽ cấu hình khối máy chủ này, nhưng bạn nên điều chỉnh bất kỳ khối máy chủ nào khác mà bạn đã định cấu hình:

sudo nano /etc/nginx/nginx.conf

Bên trong tệp, định vị khối xác định ngữ cảnh máy chủ. Bây giờ chúng tôi có thể trỏ Nginx đến các trang lỗi tùy chỉnh của chúng tôi.

Lỗi 404 trực tiếp vào trang 404 tùy chỉnh

Tệp cấu hình CentOS Nginx đã định nghĩa trang lỗi 404 bằng cách sử dụng error_page chỉ thị. Chúng tôi sẽ cần phải thay đổi điều này để khi xảy ra lỗi 404 (khi không tìm thấy tệp được yêu cầu), trang tùy chỉnh bạn đã tạo được phân phối. Chúng tôi sẽ điều chỉnh khối vị trí được liên kết cho tệp để chúng tôi có thể đảm bảo rằng gốc khớp với vị trí hệ thống tệp của chúng tôi và tệp chỉ có thể truy cập được thông qua chuyển hướng Nginx nội bộ (không yêu cầu trực tiếp bởi khách hàng):

/etc/nginx/nginx.conf

http {

    . . .

    server {

        . . .

        error_page 404 /custom_404.html;
        location = /custom_404.html {
            root /usr/share/nginx/html;
            internal;
        }

        . . .
    }
}

Thông thường, chúng tôi sẽ không phải đặt root trong khối vị trí mới vì nó khớp với gốc trong khối máy chủ. Tuy nhiên, chúng tôi đang được rõ ràng ở đây để các trang lỗi của chúng tôi được phục vụ ngay cả khi chúng tôi di chuyển nội dung web thông thường của chúng tôi và tài liệu gốc được liên kết đến một vị trí khác.

Lỗi cấp 500 trực tiếp cho trang tùy chỉnh 50x

Tiếp theo, chúng ta có thể thêm các chỉ thị để đảm bảo rằng khi Nginx gặp phải lỗi 500 cấp (các vấn đề liên quan đến máy chủ), nó sẽ phục vụ trang tùy chỉnh khác mà chúng ta đã thực hiện. Điều này sẽ thực hiện theo công thức chính xác mà chúng tôi đã sử dụng trong phần trước. Lần này, chúng tôi đặt nhiều lỗi 500 cấp cho tất cả sử dụng custom_50x.html trang:

/etc/nginx/nginx.conf

http {

    . . .

    server {

        . . .

        error_page 404 /custom_404.html;
        location = /custom_404.html {
            root /usr/share/nginx/html;
            internal;
        }

        error_page  500 502 503 504 /custom_50x.html;
        location = /custom_50x.html {
            root /usr/share/nginx/html;
            internal;
        }

        location /testing {
            fastcgi_pass unix:/does/not/exist;
        }
    }
}

Ở phía dưới cùng, chúng tôi cũng thêm một thẻ FastCGI giả để chúng tôi có thể kiểm tra trang lỗi 500 cấp của chúng tôi. Điều này sẽ không hoạt động chính xác vì phần phụ trợ không tồn tại. Yêu cầu một trang ở đây sẽ cho phép chúng tôi kiểm tra rằng lỗi 500 cấp phục vụ trang tùy chỉnh của chúng tôi.

Lưu và đóng tệp khi bạn hoàn tất.

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

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

sudo nginx -t

Nếu có bất kỳ lỗi nào được báo cáo, hãy sửa chúng trước khi tiếp tục. Khi không có lỗi cú pháp được trả về, khởi động lại Nginx bằng cách gõ:

sudo systemctl restart nginx

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

nginx custom 404

Khi bạn đi đến vị trí chúng tôi thiết lập để vượt qua FastCGI, chúng tôi sẽ nhận được lỗi 502 Bad Gateway với trang 500 cấp tùy chỉnh của chúng tôi:

http://server_domain_or_IP/testing

nginx custom 50x

Bây giờ bạn có thể quay trở lại và loại bỏ vị trí vượt qua FastCGI giả từ cấu hình Nginx của bạn.

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