[Nginx] Hướng dẫn cấu hình Nginx bảo trì website với HTTP 503

Mã trạng thái HTTP 503 thường được thể hiện nội dung trạng thái rằng website hiện tại không thể truy cập hoặc đang được bảo trì. Mã lỗi 503 thường dùng để thông báo cho khách hàng hoặc người truy cập rằng website đang có vấn đề kĩ thuật tạm thời.

HTTP Status code 503

Lưu ý:
Mã lỗi 503 rất quan trọng trong việc thông báo cho cả ‘search engine‘ rằng website sẽ ngừng phục vụ bot một thời gian luôn. Nếu không set mã lỗi HTTP 503 thì sẽ rất dễ bị đánh rớt hạng trong thời gian bảo trì website.

Thông thường các bạn có thể code tính năng trả lỗi 503 HTTP ngay trong mã nguồn, nhưng giờ trong bài viết này mình muốn đơn giản là tạo 1 file .html thông báo tình trạng bảo trì và cấu hình cho Nginx trả thông báo 503 bảo trì website thì sao nhỉ, cùng đọc tiếp bài viết nhé.

Contents

1. Tạo 1 file .html bảo trì website

– Nếu bạn rành code HTML và CSS, bạn có thể tuỳ biến lại nội dung thông báo trang 503 một cách đẹp đẽ hơn. Còn nội dung code ở dưới là nội dung trang 503 đơn giản nhất.

# vi /home/cuongquach.com/public_html/maintenance_demo.html
<html>
<head>
<title>Error 503 Service Unavailable</title>
</head>
<body>
<h1>503 Service Unavailable</h1>
Our apologies for the temporary inconvenience. The requested URL generated 503 "Service Unavailable" error due to overloading or maintenance of the server. 
</body>
</html>

2. Cấu hình Nginx bảo trì trang 503 html

– Bạn sẽ cấu hình điều kiện ‘if‘ trong Virutal Host tương ứng tên miền website bạn đang host trên Nginx Server như sau :

# vi /usr/local/nginx/config/nginx.conf
   ...
   if ( -f $document_root/maintenance_demo.html ) {
      return 503;
   }
   error_page 503 @maintenance;
   location @maintenance {
      rewrite ^(.*)$ /maintenance_demo.html break;
   }
   ...

 
Diễn giải:
– Nội dung cấu hình trên như sau : nếu tìm thấy file ‘maintenance_demo.html‘ nằm trong thư mục $document_root (tương ứng /home/cuongquach.com/public_html/) thì hãy trả mã trạng thái HTTP 503. Cấu hình mã trạng thái 503 sẽ được xử lý bởi ‘location @maintenance‘ bằng cách rewrite toàn bộ các đường link truy cập đến tên miền website tương ứng Vhost đang cấu hình, chuyển hướng phục vụ file ‘maintenance_demo.html‘ cho người dùng.

Cấu hình đầy đủ dạng cơ bản sẽ như dưới đây chẳng hạn :

server {
	access_log  logs/cuongquach_access.log main;
	error_log   logs/cuongquach_error.log info;
	index       index.html;

	listen      xxx.yyy.zzz.www:80 default;
	root        /home/cuongquach.com/public_html/;
	server_name cuongquach.com www.cuongquach.com;

	## Only requests to our Host are allowed
	if ( $host !~ ^(cuongquach.com|www.cuongquach.com)$ ) {
	 return 444;
	}
	if ( -f $document_root/maintenance_demo.html ) {
		return 503;
	}
	
	error_page 503 @maintenance;
	
	location @maintenance {
	rewrite ^(.*)$   /maintenance_demo.html break;
	}
	...
}

 
– Khởi động lại dịch vụ Nginx để áp cấu hình mới.

# service nginx reload

3. Trường hợp chỉ cấu hình cho 1 nhóm người truy cập nội dung site trong lúc bảo trì

– Nếu mà bạn muốn cho phép một số người truy cập từ các nguồn IP khác nhau được tiếp xúc với nội dung website thật trong thời gian bảo trì website thì bạn có thể cấu hình như sau :

	...

	if ( $remote_addr != "x.x.x.x") {
		return 503;
	}
	error_page 503 @maintenance;
	location @maintenance {
		rewrite ^(.*)$   /maintenance_demo.html break;
	}
	
	...

 
Bạn sử dụng biến $remote_addr để trích xuất lọc thông tin IP của client gửi HTTP request đến nhé. Trong đó ‘x.x.x.x‘ là ip mà bạn muốn truy cập được nội dung website thật trong thời gian bảo trì. Rồi tiếp đến khởi động lại dịch vụ Nginx.

Sau cùng bạn hãy thử truy cập tên miền mà bạn vừa cấu hình xem nào.

Cám ơn các bạn đã theo dõi bài viết nhé.

Previous article[MySQL] Fix lỗi ‘MySQL server has gone away’ khi import database
Next article[ShellScript] Hướng dẫn code hiển thị thông báo xác nhận yes/no bash shell
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !