Cách cấu hình Nginx để sử dụng các trang lỗi tùy chỉnh trên Ubuntu 14.04
Nginx là một web server hiệu suất cao có khả năng cung cấp nội dung một cách linh hoạt và mạnh mẽ. 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 Nginx để 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 Nginx trên hệ thống của bạn . Tìm hiểu cách cài đặt điều này theo hướng dẫn này .
Khi bạn đã hoàn thành các bước trên, hãy tiếp tục với 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 bạn trong folder /usr/share/nginx/html
nơi Nginx 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 /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ờ 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 Nginx để sử dụng các trang lỗi của bạn
Bây giờ, ta chỉ cần nói với Nginx 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 khối server trong folder /etc/nginx/sites-enabled
mà bạn muốn cấu hình . Ta sẽ sử dụng file khối server mặc định được gọi là default
, 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/nginx/sites-enabled/default
Bây giờ ta có thể trỏ Nginx đến các trang lỗi tùy chỉnh của ta .
Trực tiếp các lỗi 404 đến trang 404 tùy chỉnh
Sử dụng chỉ thị error_page
để khi lỗi 404 xảy ra (khi không tìm thấy file được yêu cầu), trang tùy chỉnh bạn đã tạo sẽ được phục vụ. Ta sẽ tạo một khối vị trí cho file , nơi ta có thể đảm bảo root trùng với vị trí hệ thống file của ta và file chỉ có thể truy cập được thông qua chuyển hướng Nginx nội bộ (khách hàng không thể yêu cầu trực tiếp):
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; . . . error_page 404 /custom_404.html; location = /custom_404.html { root /usr/share/nginx/html; internal; } }
Thông thường, ta sẽ không phải đặt root
trong khối vị trí mới vì nó trùng với root trong khối server . Tuy nhiên, ta đang trình bày rõ ràng ở đây để các trang lỗi của ta được phục vụ ngay cả khi ta di chuyển nội dung web thông thường và root tài liệu được liên kết sang một vị trí khác.
Trực tiếp 500 lỗi cấp cho trang 50x tùy chỉnh
Tiếp theo, ta có thể thêm các chỉ thị đảm bảo rằng khi Nginx gặp lỗi cấp 500 (sự cố liên quan đến server ), nó sẽ phục vụ trang tùy chỉnh khác mà ta đã thực hiện. Điều này sẽ tuân theo cùng một công thức mà ta đã sử dụng trong phần trước. Lần này, ta đặt nhiều lỗi cấp 500 để tất cả sử dụng trang custom_50x.html
:
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; . . . 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; } }
Ở dưới cùng, ta cũng đã thêm một thẻ FastCGI giả để ta có thể kiểm tra trang lỗi 500 cấp của bạn . Điều này sẽ không hoạt động chính xác vì phần backend không tồn tại. Truy cập một trang ở đây sẽ cho phép ta kiểm tra xem các lỗi cấp 500 có phục vụ trang tùy chỉnh của ta hay không.
Lưu file khi bạn hoàn tất.
Khởi động lại Nginx và kiểm tra các trang web
Kiểm tra cú pháp của file cấu hình của bạn bằng lệnh :
- sudo nginx -t
Nếu 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 nào được trả lại, hãy khởi động lại Nginx bằng lệnh :
- sudo service nginx 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
Khi bạn đi đến vị trí ta cài đặt cho thẻ FastCGI, ta sẽ nhận được lỗi 502 Bad Gateway với trang 500 cấp tùy chỉnh của ta :
http://server_domain_or_IP/testing
Đến đây bạn có thể quay lại và xóa vị trí pass FastCGI giả khỏi cấu hình Nginx của bạn .
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.
Các tin liên quan
Cách cấu hình Nginx để sử dụng các trang lỗi tùy chỉnh trên CentOS 72015-06-05
Cách chuyển hướng www sang không có www với Nginx trên CentOS 7
2015-05-04
Cách chuyển hướng www thành không có www với Nginx trên Ubuntu 14.04
2015-05-04
Cách triển khai ứng dụng Rails với Puma và Nginx trên Ubuntu 14.04
2015-04-01
Cách triển khai ứng dụng Rails với Unicorn và Nginx trên Ubuntu 14.04
2015-03-26
Cách cung cấp ứng dụng flask với Gunicorn và Nginx trên CentOS 7
2015-03-23
Cách cung cấp các ứng dụng Flask với Gunicorn và Nginx trên Ubuntu 14.04
2015-03-20
Cách cung cấp các ứng dụng Flask với uWSGI và Nginx trên CentOS 7
2015-03-20
Cách cung cấp các ứng dụng Flask với uWSGI và Nginx trên Ubuntu 14.04
2015-03-19
Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Ubuntu 14.04
2015-03-18