Các quy tắc chuyển hướng cho S3 Static Website
Bằng cách sử dụng các quy tắc chuyển hướng nâng cao, bạn có thể chuyển hướng các yêu cầu dựa trên tiền tố của khoá (Key Prefix) hoặc mã phản hồi (Response code). Các quy tắc chuyển hướng nâng cao trong bài học này chỉ được áp dụng cho S3 Static Website.
1. S3 Rest API Endpoint URL vs S3 Web Endpoint URL
Chú ý: Có hai định dạng tên miền được cung cấp bởi Amazon S3 để bạn truy cập vào các đối tượng trong Bucket. Các quy tắc chuyển hướng trong bài học này chỉ hỗ trợ cho "S3 Website Endpoint URL".
Type | URL Format | Suport Redirection? |
S3 Endpoint URL |
| No |
Website Endpoint URL |
| Yes |
Nếu bạn không muốn sử dụng các tên miền không thân thiện trên, bạn có thể cấu hình một tên miền tuỳ biến của bạn hoặc sử dụng CloudFront:
2. Cấu hình chuyển hướng ở đâu?
Đầu tiên, đăng nhập vào AWS S3 Console, và lựa chọn một S3 Bucket.
- Properties > Static web hosting > Edit
Bạn sẽ nhìn thấy một trình soạn thảo văn bản, nơi bạn sẽ định nghĩa các quy tắc chuyển hướng với định dạng JSON.
3. Các thuộc tính JSON
Dưới đây là cú pháp để định nghĩa một quy tắc định tuyến trong S3 Static Website:
[
{
"Condition":{
"HttpErrorCodeReturnedEquals":"string",
"KeyPrefixEquals":"string"
},
"Redirect":{
"HostName":"string",
"HttpRedirectCode":"string",
"Protocol":"http""|""https",
"ReplaceKeyPrefixWith":"string",
"ReplaceKeyWith":"string"
}
}
]
JSON Property | Description |
Condition | Vùng chứa để mô tả một điều kiện phải được đáp ứng để áp dụng chuyển hướng đã chỉ định. Nếu quy tắc định tuyến không bao gồm "Condition" thì quy tắc đó sẽ được áp dụng cho tất cả các yêu cầu. |
HttpErrorCodeReturnedEquals | Mã lỗi HTTP. 403, 404,..
|
KeyPrefixEquals | Tiền tố của khóa đối tượng cho bởi yêu cầu.
|
Redirect | Vùng chứa cung cấp các chỉ dẫn cho việc chuyển hướng yêu cầu. Một phần tử Redirect phải chứa ít nhất một phần tử con. |
HostName | Chỉ định một tên miền khác mà yêu cầu sẽ được chuyển tới.
|
HttpRedirectCode | Mã chuyển hướng (redirect code) của phản hồi (response) được trả về cho người dùng. Các giá trị là 200, 301, 302, 404,...
|
Protocol | Chỉ định một giao thức khác mà yêu cầu sẽ được chuyển hướng tới. Giá trị của nó là "http" hoặc "https".
|
ReplaceKeyPrefixWith | Chỉ định tiền tố mới để thay thế cho KeyPrefixEquals.
|
ReplaceKeyWith | Chỉ định khoá mới để thay thế cho khoá ban đầu của đối tượng.
|
4. Chuyển hướng sau khi thay đổi tiếp đầu ngữ của Key
Giả sử rằng Bucket của bạn có các đối tượng sau:
- index.html
- docs/article1.html
- docs/article2.html
Bạn quyết định đổi tên thư mục "docs/" thành "documents/". Sau khi thực hiện hành động này bạn phải chuyển hướng các đường dẫn cũ thành mới để đảm bảo rằng người dùng đã từng sử dụng đường dẫn cũ vẫn tiếp cận được tài liệu mà họ quan tâm.
- /docs/article1.html --> /documents/article1.html
Cấu hình chuyển hướng:
[
{
"Condition": {
"KeyPrefixEquals": "docs/"
},
"Redirect": {
"ReplaceKeyPrefixWith": "documents/"
}
}
]
Chú ý rằng: Các quy tắc chuyển hướng chỉ hoạt động khi cấu trúc URL là "Web Endpoint".
- http://{bucket-name}.s3-website.{Region}.amazonaws.com/docs/article1.html
5. Chuyển hướng tới một trang để thông báo một thư mục đã bị xoá
Giả sử một thư mục đã bị xoá khỏi S3 Bucket, các tài liệu trong thư mục này không còn được hỗ trợ nữa. Nếu người dùng cố gắng truy cập vào các tài liệu trong thư mục này, bạn sẽ chuyển hướng họ đến một trang thông báo.
html2-deleted.html
<!DOCTYPE html>
<html>
<head>
<title>Html 2.0 Lessons Deleted</title>
</head>
<body>
HTML 2.0 lessons are no longer supported. <br/>
You can learn HTML 5 by following the link below: <br/>
<a href='/html5/get-started.html'>Learn HTML5</a>
</body>
</html>
Cấu hình chuyển hướng:
[
{
"Condition":{
"KeyPrefixEquals":"html2/"
},
"Redirect":{
"ReplaceKeyWith":"html2-deleted.html"
}
}
]
Kiểm tra kết quả:
6. Chuyển hướng cho một lỗi HTTP
Giả sử rằng người dùng xem thông tin về một "tác giả" nhưng không tìm thấy, bạn muốn chuyển hướng yêu cầu này tới máy chủ thực sự để xử lý. Chẳng hạn, chuyển yêu cầu tới Amazon EC2 (Amazon Elastic Computing Cloud).
[
{
"Condition": {
"KeyPrefixEquals": "author/",
"HttpErrorCodeReturnedEquals": "404"
},
"Redirect": {
"HostName": "ec2-11-22-333-44.compute-1.amazonaws.com",
"ReplaceKeyPrefixWith": "report-author-404/"
}
}
]
Kiểm tra kết quả:
- ---> http://ec2-11-22-333-44.compute-1.amazonaws.com/report-author-404/123
- Giới thiệu về Amazon EC2
7. Có thể bạn quan tâm
Các quy tắc chuyển hướng được cung cấp bởi Amazon S3 ở trên có vẻ quá đơn giản và có thể không thoả mãn được nhu cầu thực tế của bạn. Hãy xem xét một tình huống:
Giả sử rằng bạn có một trang như thế này:
- http://yourdomain.com/12345/java-tutorial
Đôi khi người dùng sử dụng các URL không chính xác, có thể do lỗi chính tả, chẳng hạn:
- http://yourdomain.com/12345/java-tuto
- http://yourdomain.com/12345/
- http://yourdomain.com/12345
CloudFront error pages
Với tình huống trên bạn muốn chuyển hướng yêu cầu của người dùng tới URL chính xác. Bạn nên dụng CloudFront để giải quyết vấn đề này và có nhiều tình huống phức tạp khác.
AWS Lambda
Sử dụng AWS Lambda để chuyển hướng.
- CloudFront direction Lambda
x-amz-website-redirect-location
Chuyển hướng một đối tượng dựa trên metadata x-amz-website-redirect-location.
Các hướng dẫn Amazon Web Services
- Giới thiệu về Amazon Web Services (AWS)
- Giới thiệu về Amazon S3
- Giới thiệu về Amazon Cloudfront và kiến trúc của nó
- Làm sao để giảm chi phí Amazon Cloudfront?
- Vô hiệu hoá bộ nhớ đệm CloudFront
- Giới thiệu về DigitalOcean Spaces
- Hướng dẫn tạo DigitalOcean Spaces Bucket
- Giới thiệu về Amazon ACM
- Java Awssdk S3 Tải tệp lên S3 Bucket với S3Client
- Tạo AWS accessKeyId/secretAccessKey
- Java Awssdk S3 Liệt kê các đối tượng trong S3 Bucket
- Lưu trữ (host) một Website tĩnh trên Amazon S3
- Vô hiệu hoá bộ nhớ đệm của CloudFront với Java
- Tạo DigitalOcean Spaces Access Key
- Java Awssdk Các Credentials Provider thông dụng
- Java Awssdk Tạo và sử dụng ProfileCredentialsProvider
- Java Awssdk Tạo và sử dụng EnvironmentVariableCredentialsProvider
- Java Awssdk Tạo và sử dụng SystemPropertyCredentialsProvider
- Java Awssdk S3 Tải object lên với S3TransferManager
- Java Awssdk S3 Tải object xuống với S3TransferManager
- Java thao tác với DigitalOcean Spaces sử dụng S3TransferManager
- Java tạo, liệt kê và xoá S3 Bucket
- Aws Console Tạo tài khoản người dùng IAM
- Tạo một vùng chứa Amazon S3 (S3 Bucket)
- Các quy tắc chuyển hướng cho S3 Static Website
- Cấu hình tên miền tuỳ chỉnh cho website tĩnh Amazon S3
- Tạo bản phân phối CloudFront cho S3 Bucket
- Cấu hình các trang phản hồi lỗi cho CloudFront
- Tạo các chính sách S3 Bucket
- Công cụ tạo các chính sách cho AWS - policygen
- So sánh Amazon S3 Rest API Endpoint và S3 Web Endpoint
- Chuyển hướng trong S3 Website với x-amz-website-redirect-location
- Di chuyển (migrate) dịch vụ DNS tới Amazon Route 53
- Chuyển (transfer) đăng ký tên miền tới Amazon Route 53
- Yêu cầu chứng chỉ SSL từ Amazon ACM
Show More