mục tiêu của tôi
Tôi có một số miền (ví dụ: 10 hoặc 20) và tôi muốn chuyển hướng không tí nào du khách đến bất cứ nơi nào trên các trang đó đến một trang trên miền khác (ví dụ: trang hồ sơ stackoverflow.com của tôi).
Điêu nay bao gôm
- tên miền apex bằng cách sử dụng
http
(ví dụ. http://mydomain01.com
)
- tên miền apex bằng cách sử dụng
https
(ví dụ. https://mydomain01.com
)
- tên miền phụ sử dụng
http
(ví dụ. http://www.mydomain01.com
hoặc http://blog.mydomain01.com
)
- tên miền phụ sử dụng
https
(ví dụ. https://www.mydomain01.com
hoặc https://blog.mydomain01.com
)
- bất kỳ đường dẫn nào (ví dụ:
http://mydomain01.com/some_path
hoặc https://www.mydomain01.com/another/path.html
)
cộng với điều tương tự cho tất cả các miền khác của tôi (mydomain02.com
, mydomain03.com
, vân vân.; từng với các trường hợp sử dụng ở trên).
Nghiên cứu của tôi
- Bài viết AWS này giải thích cách chuyển hướng lưu lượng truy cập internet từ miền apex sang miền khác (trường hợp #1 trong Điêu nay bao gôm danh sách trên) bằng cách sử dụng AWS S3 và Tuyến AWS 53: Điều này làm việc cho
http
, nhưng không phải cho https
.
- Bài viết AWS này giải thích cách chuyển hướng lưu lượng truy cập internet cho một số trường hợp (nhìn bề ngoài, bao gồm tất cả các trường hợp trong Điêu nay bao gôm danh sách trên) bằng cách sử dụng AWS S3, Tuyến AWS 53 và Mặt trận đám mây AWS: Điều này làm việc cho cả hai
http
và https
. (Cũng nói về việc sử dụng Cân bằng tải ứng dụng, nhưng tôi đoán điều đó nằm ngoài phạm vi ở đây...)
- Bài viết AWS này bổ sung thêm một số chi tiết về cách thiết lập bản phân phối CloudFront và cách xem thông tin chi tiết về các tệp nhật ký.
- Bài viết AWS này tài liệu quy tắc chuyển hướng để sử dụng chuyển hướng có điều kiện nâng cao: Không chắc liệu tôi có cần đến đó để hoàn thành mục tiêu của mình hay không, vì vậy tôi chưa thực sự xem xét điều đó.
Ngoài ra, rõ ràng có rất nhiều câu hỏi SO (xem Có liên quan ở bên phải của câu hỏi này) và các bài đăng khác về chủ đề này; vấn đề với hầu hết trong số đó là chúng sử dụng ảnh chụp màn hình từ các phiên bản trước của Giao diện người dùng bảng điều khiển AWS: Hầu hết nội dung vẫn giống nhau, nhưng việc so sánh các ảnh chụp màn hình đó với giao diện người dùng IMO hiện tại sẽ tạo thêm một lớp nhầm lẫn khác.
Các điểm chính rút ra từ tài liệu AWS (và các tài liệu khác):
- Tôi cần tạo một bộ chứa trong AWS S3 và định cấu hình chuyển hướng trong đó,
- Tôi cần tạo một bản phân phối trong AWS CloudFront;
- để sử dụng miền tùy chỉnh trong CloudFront, tôi cần tạo chứng chỉ trong AWS ACM,
- Tôi cần tạo một vùng được lưu trữ trong AWS Route 53 và định cấu hình các bản ghi trong đó.
công việc của tôi cho đến nay
AWS CLI mới nhất đã được cài đặt, khu vực
và đầu ra
được cấu hình trong ~/.aws/config
, thông tin đăng nhập được thiết lập trong ~/.aws/credentials
(mỗi cho mọi tài khoản AWS); AWS_*
biến môi trường là xuất khẩu
biên tập
Tôi đang sử dụng khu vực AWS Miền Đông Hoa Kỳ (Bắc Virginia) (US-East-1)
cho mọi thứ để ngăn chặn bất kỳ sự cố nào khác do tài nguyên AWS không khả dụng trong một khu vực.
$ aws --version
aws-cli/2.2.23 Python/3.9.6 Darwin/19.6.0 source/x86_64 nhắc/tắt
Tôi bỏ qua bất kỳ dấu nhắc shell nào hoặc >
các ký tự tiếp tục dòng trình bao để sao chép dễ dàng hơn từ bài đăng này vào trình bao.
Thiết lập nhóm S3
Cảnh báo: Điều này tạo ra một nhóm "tất cả công khai" mà không có bất kỳ giới hạn truy cập nào. Trong trường hợp này, điều này không thành vấn đề vì không có nội dung nào trong nhóm cần bảo vệ, nhưng nhóm chung như vậy nói chung là một cách làm không tốt. Ngoài ra, tôi đang sử dụng nhóm công khai để ngăn mọi sự cố khác do hạn chế truy cập gây ra: Đầu tiên, làm cho nó hoạt động; thứ hai, làm cho nó an toàn.
tạo thùng
aws s3api tạo thùng --bucket mydomain01.com
{
"Vị trí": "/mydomain01.com"
}
thiết lập chuyển hướng
aws s3api put-bucket-website --bucket mydomain01.com --website-configuration \
'{ "RedirectAllRequestsTo": { "HostName": "stackoverflow.com/users/217844/ssc" } }'
Hiểu rồi: Tên bộ chứa S3 phải khớp với tên miền apex.
Sử dụng bất kỳ tên nhóm nào nhưng mydomain01.com
(ví dụ của tôi) dường như không thành công mà không có bất kỳ dấu hiệu nào về nguyên nhân. Các tài liệu AWS không thực sự làm rõ điều này - trên thực tế, tôi vẫn không chắc liệu mình có hiểu nhầm điều gì đó ở đây hay không, nhưng từ những gì tôi có thể nói, tài liệu chính thức của AWS thực sự hơi cẩu thả về điều đó - IMO - điểm mấu chốt quan trọng : Ví dụ, #2 chỉ cần nói
- Tạo một bộ chứa S3 có tên duy nhất toàn cầu.
Có thể là không tí nào tên duy nhất trên toàn cầu. #1 đề cập đến điều đó theo một cách nào đó - một khi bạn biết cách đọc những bit đó ...
Bên cạnh đó, bài báo số 2 tiếp tục làm tôi bối rối với
Nếu bạn không sử dụng miền tùy chỉnh ...
Tại sao tôi lại không phải đang sử dụng miền tùy chỉnh?!? Toàn bộ vấn đề là chuyển hướng miền tùy chỉnh của tôi, phải không?!? Chà, dù sao thì...
Hiểu rồi: Không được thêm giao thức vào tên máy chủ.
Cả Bảng điều khiển AWS và AWS CLI dường như không kiểm tra xem một giao thức (http://
hoặc https://
) đã được nhập vào Tên máy chủ trường giao diện người dùng/được thông qua trong Tên máy chủ
Chuỗi JSON. Tuy nhiên, nếu một cái được thêm vào trước, thì chuyển hướng không thành công; xem chuyển hướng thử nghiệm phía dưới.
Hiểu rồi: Lỗi giao diện người dùng Bảng điều khiển AWS S3.
Sau khi thiết lập chuyển hướng, Bảng điều khiển AWS hiển thị liên kết có thể nhấp trong giao diện người dùng của nó tới URL bộ chứa (http://mydomain01.com.s3-website-us-east-1.amazonaws.com
) ở dưới cùng của thùng Tính chất tab, trong Lưu trữ trang web tĩnh tiết diện.
Nhấp vào liên kết đó không mở được trang, có vẻ như do Bảng điều khiển AWS làm rối URL và cố mở http://https//stackoverflow.com/users/217844/ssc/
, bất kể giao thức.
chuyển hướng thử nghiệm
- sử dụng
HTTPie
trong vỏ thay vì Xoăn
hoặc quên đi
bởi vì đó là những gì những đứa trẻ tuyệt vời dường như sử dụng ngày nay
- sao chép liên kết từ Bảng điều khiển AWS trong trình duyệt sang shell
http://mydomain01.com.s3-website-us-east-1.amazonaws.com/
HTTP/1.1 301 được di chuyển vĩnh viễn
Độ dài nội dung: 0
Ngày: Thứ Hai, ngày 02 tháng 8 năm 2021 12:39:09 GMT
Vị trí: http://stackoverflow.com/users/217844/ssc/
Máy chủ: AmazonS3
x-amz-id-2: rakAqUMnRraGvo/WkSa6AnbuhWn/9YZX/CAlI/OJQKYoWp/OdQIbyhsvHSwNved3suwMdgglqpE=
x-amz-request-id: C5BBG833Q9TQ9J6X
-> dường như hoạt động
- kiểm tra chuyển hướng nếu giao thức được thêm nhầm vào tên máy chủ; lưu ý bị hỏng
Địa điểm
url:
http://mydomain01.com.s3-website-us-east-1.amazonaws.com/
HTTP/1.1 301 được di chuyển vĩnh viễn
Độ dài nội dung: 0
Ngày: Thứ Hai, ngày 02 tháng 8 năm 2021 12:52:10 GMT
Vị trí: http://https://stackoverflow.com/users/217844/ssc/
Máy chủ: AmazonS3
x-amz-id-2: Ee2/ob0faTpRdp6mGITdmClozXNmF1Q2oTbPioms8O91VA8n5VA3MoHhveeFz7v2VS65YKFKlDA=
x-amz-request-id: ZJP653R50YD5HSRS
Câu hỏi của tôi #1
LƯU Ý: Tôi đã có những câu hỏi này khi bắt đầu viết bài này; Tôi nghĩ Tôi đã có thể tự trả lời chúng kể từ đó (xem kiểm tra www
bản ghi tên miền phụ phía dưới). Ai đó hãy sửa tôi nếu tôi sai:
- Hỏi: Yêu cầu "tên nhóm == tên miền" có được áp dụng ngay cả khi tôi sử dụng CloudFront không?
MỘT: Đúng.
- Hỏi: Tôi có cần tạo một nhóm cho mỗi tên miền apex và mọi tên miền phụ không? vì vậy, trong ví dụ của tôi
mydomain01.com
www.mydomain01.com
blog.mydomain01.com
?
MỘT: Đúng.
Thiết lập vùng được lưu trữ trên Tuyến 53
tạo vùng lưu trữ
aws route53 create-hosted-zone --caller-reference "$(date '+%Y%m%d-%H%M%S')" --name mydomain01.com
{
"Vị trí": "https://route53.amazonaws.com/2013-04-01/hostedzone/Z123456789EXAMPLE0SKX",
"Khu vực lưu trữ": {
"Id": "/hostedzone/Z123456789EXAMPLE0SKX",
"Tên": "mydomain01.com.",
"Tham khảo người gọi": "20210802-150736",
"Cấu hình": {
"Khu vực riêng tư": sai
},
"ResourceRecordSetCount": 2
},
"Thông tin thay đổi": {
"Id": "/change/C1234567890SKXEXAMPLE",
"Tình trạng: Đang chờ",
"Đã gửiAt": "2021-08-02T13:07:37.860000+00:00"
},
"Bộ ủy quyền": {
"Máy chủ định danh": [
"ns-1234.awsdns-12.com",
"ns-5678.awsdns-34.co.uk",
"ns-1234.awsdns-56.net",
"ns-5678.awsdns-78.org"
]
}
}
- lưu ý ID vùng được lưu trữ
Z123456789EXAMPLE0SKX
, cần thiết trong các bước tiếp theo
tạo bản ghi cho miền apex
- Tuyến AWS 53
thay-đổi-tài-liệu-bộ
tài liệu
- cái này nên làm việc cho
http
, nhưng không phải cho https
- JSON để vượt qua hơi phức tạp; tạo một tệp tạm thời cục bộ
thay đổi-batch.apex.json
với nội dung bên dưới
- nhận giá trị cho
HostedZoneId
và Tên DNS
từ Điểm cuối trang web Amazon S3: Xô được tạo ra trong Miền Đông Hoa Kỳ (Bắc Virginia)
, vì vậy hãy sử dụng Z3AQBSTGFYJSTF
{
"Thay đổi": [
{
"Hành động": "TẠO",
"ResourceRecordSet": {
"Tên": "mydomain01.com.",
"Loại": "A",
"Mục tiêu bí danh": {
"HostedZoneId": "Z3AQBSTGFYJSTF",
"DNSName": "s3-website-us-east-1.amazonaws.com",
"Đánh giá sức khỏe mục tiêu": sai
}
}
}
]
}
Hiểu rồi: Phải dùng nguyên văn s3-website-us-east-1.amazonaws.com
vì Tên DNS
.
Tài liệu AWS nói ở mọi nơi về ví dụ.com
hoặc example.com.s3-website-us-east-1.amazonaws.com
, v.v. Trong trường hợp này, đây không phải là một số ví dụ được thay thế bằng các giá trị riêng (ví dụ: mydomain01.com.s3-website-us-east-1.amazonaws.com
), nhưng giá trị nguyên văn từ cái bàn, I E. s3-website-us-east-1.amazonaws.com
.
Hiểu rồi: Không được thêm giao thức vào tên máy chủ.
Tương tự như lỗi xác thực ở trên, cả Bảng điều khiển AWS và AWS CLI đều sẵn sàng chấp nhận một giao thức (http://
hoặc https://
) được thêm vào trước giá trị được nhập trong Tên máy chủ Trường giao diện người dùng/được thông qua dưới dạng Tên DNS
. Ít nhất, điều này có vẻ rất sai trong Bảng điều khiển, ví dụ: http\072\057\057mydomain01.s3-website-us-east-1.amazonaws.com.
Cả hai vấn đề đều được giảm thiểu phần nào trong Bảng điều khiển AWS, nơi có thể chọn các giá trị từ hộp thả xuống khi bản ghi được tạo hoặc chỉnh sửa; khi sử dụng AWS CLI, bạn phải kiểm tra kỹ những gì mình gửi.
Gotcha và giảm thiểu tương tự áp dụng cho ghi tên trường giao diện người dùng / Tên
Giá trị JSON.
tạo bản ghi cho miền apex, tiếp.
- sử dụng
jq
để kiểm tra nhanh, tệp tạm thời chứa json hợp lệ
jq. < change-batch.apex.json 1> /dev/null
- không có đầu ra -> JSON hợp lệ
aws route53 change-resource-record-sets --hosted-zone-id Z123456789EXAMPLE0SKX \
--change-batch "file://$(pwd)/change-batch.apex.json"
{
"Thông tin thay đổi": {
"Id": "/change/C1234567890EXAMPLESKX",
"Tình trạng: Đang chờ",
"Đã gửiAt": "2021-08-02T14:20:09.370000+00:00"
}
}
kiểm tra bản ghi tên miền apex
http://mydomain01.com
HTTP/1.1 301 được di chuyển vĩnh viễn
Độ dài nội dung: 0
Ngày: Thứ Hai, 02 Tháng 8 năm 2021 15:06:08 GMT
Vị trí: http://stackoverflow.com/users/217844/ssc/
Máy chủ: AmazonS3
x-amz-id-2: EfDtCxif2iV4eInskirSBAOjQS7o9arzJCeZjscF6mW7cwwmm9Nxb7QJT50x2kjdslX2fOxA+lk=
x-amz-yêu cầu-id: WM7K9TDEF75A6P1V
--> có vẻ tốt
- kiểm tra
http
với một con đường
http http://mydomain01.com/some/path
... đầu ra tương tự như trên ...
http://mydomain01.com
http: lỗi: Lỗi kết nối: HTTPSConnectionPool(host='mydomain01.com', port=443):
Đã vượt quá số lần thử lại tối đa với url: / (Nguyên nhân là do NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x101a48100>:
Không thể thiết lập kết nối mới: [Errno 60] Thao tác đã hết thời gian chờ')) trong khi thực hiện yêu cầu GET tới URL: https://mydomain01.com/
- (phản hồi được bao bọc để dễ đọc)
-> hết thời gian (sau 60 giây?) - như mong đợi: chuyển hướng bằng bộ chứa S3 không hoạt động với https
(xem ở trên)
Hiểu rồi: Độ trễ lan truyền thay đổi DNS.
AWS và Google là rất nhanh về mặt truyền bá các thay đổi đối với cài đặt DNS (tính bằng giây hoặc phút), nhưng có thể có các máy chủ định danh khác, "chậm hơn" có liên quan. Bỏ qua chúng như mô tả đây để loại bỏ nguồn nhầm lẫn đó. Cách tiếp cận đó chỉ hoạt động trong macOS, nhưng khái niệm này giống nhau đối với mọi hệ điều hành.
Hiểu rồi: Bộ đệm của trình duyệt.
Khi kiểm tra các thay đổi DNS không phải trong trình bao mà trong trình duyệt, trình duyệt có thể nhận được kết quả từ bộ đệm của nó. Tôi thực hiện hầu hết công việc của mình bằng Chrome, nhưng sử dụng Firefox (hoặc Safari) để kiểm tra, vì vậy tôi có thể xóa toàn bộ bộ đệm trước mỗi lần kiểm tra để loại bỏ sự cố tiềm ẩn đó - mà không cần đăng xuất khỏi Google, AWS, v.v.
tạo bản ghi cho www
tên miền phụ
- sự khác biệt duy nhất là
Tên
giá trị JSON
sed -e 's|mydomain01.com.|www.mydomain01.com.|g' change-batch.apex.json > change-batch.www.json
aws route53 change-resource-record-sets --hosted-zone-id Z123456789EXAMPLE0SKX \
--change-batch "file://$(pwd)/change-batch.www.json
- phản ứng tương tự như trên
kiểm tra www
bản ghi tên miền phụ
http://www.mydomain01.com
HTTP/1.1 404 Không tìm thấy
Độ dài nội dung: 363
Loại nội dung: văn bản/html; bộ ký tự = utf-8
Ngày: Thứ Hai, 02 Tháng 8 năm 2021 15:28:05 GMT
Máy chủ: AmazonS3
x-amz-id-2: MGLcynq1iEGKh+pT6N6iRpCuQSN243q/5zm2Y7rXTnM7iW9nvDokF6s20xEUBr7QiEtBPEzZmII=
x-amz-request-id: TK83G35EMYFR8SKX
<html>
<head><title>Không tìm thấy 404</title></head>
<body>
<h1>Không tìm thấy 404</h1>
<ul>
<li>Mã: NoSuchBucket</li>
<li>Thông báo: Nhóm được chỉ định không tồn tại</li>
<li>Tên nhóm: www.mydomain01.com</li>
<li>RequestId: TK83G35EMYFR8SKX</li>
<li>Id máy chủ: MGLcynq1iEGKh+pT6N6iRpCuQSN243q/5zm2Y7rXTnM7iW9nvDokF6s20xEUBr7QiEtBPEzZmII=</li>
</ul>
<hr/>
</body>
</html>
- Tôi nghĩ rằng câu trả lời thứ hai của Câu hỏi của tôi #1 ở trên: Tôi cần một bộ chứa S3 cho mỗi miền apex/miền phụ để chuyển tiếp.
Thiết lập phân phối CloudFront
- LƯU Ý: Bảng điều khiển AWS giúp thực sự dễ dàng yêu cầu chứng chỉ và xác thực nó bằng DNS.
tạo chứng chỉ
- ACM AWS
yêu cầu chứng chỉ
tài liệu
- chứng chỉ được cho là hoạt động cho đỉnh và tất cả các miền phụ, vì vậy cần phải thêm tên khác vào chứng chỉ này / vượt qua
--subject-alternative-names
; xem bài viết AWS này (hộp màu xanh phía trên).
- thêm dấu ngoặc kép xung quanh
*.mydomain01.com
vì vậy Shell không giải thích *
chứng chỉ yêu cầu aws acm --tên miền mydomain01.com --phương thức xác thực DNS \
--subject-alternative-names '*.mydomain01.com'
{
"Chứng chỉArn": "arn:aws:acm:us-east-1:123456789012:certificate/12345678-90ab-cdef-1234-1234567890ab"
}
123456789012
là ID tài khoản AWS của tôi; mọi thứ sau giấy chứng nhận/
chỉ là một UUID
nhận chi tiết chứng chỉ
- ACM AWS
mô tả-chứng chỉ
tài liệu
- lưu phản hồi vào tệp cục bộ tạm thời; trích xuất
ResourceRecord.Name
và ResourceRecord.Value
sử dụng jq
- cần thiết cho bản ghi AWS Route 53 chứng tỏ tôi sở hữu
mydomain01.com
- cách khác, sử dụng
--truy vấn
tham số với chứng chỉ mô tả aws acm
chứng chỉ mô tả aws acm \
--certificate-arn "arn:aws:acm:us-east-1:123456789012:certificate/12345678-90ab-cdef-1234-1234567890ab" \
> mô tả-chứng chỉ.json
jq -r '.Certificate.DomainValidationOptions[0].ResourceRecord.Name' description-certificate.json
_1234567890abcdef1234567890abcdef.mydomain01.com.
jq -r '.Certificate.DomainValidationOptions[0].ResourceRecord.Value' description-certificate.json
_1234567890abcdef1234567890abcdef.weirdchars.acm-validations.aws.
tạo bản ghi Tuyến 53 để xác thực chứng chỉ
- sẽ được AWS ACM tự động kiểm tra và chứng chỉ sẽ được xác thực sau khi tìm thấy bản ghi này
- như trước đây, hãy sử dụng tệp cục bộ tạm thời
thay đổi-batch.cert.json
, xem ví dụ tạo bản ghi cho miền apex; nội dung:
{
"Thay đổi": [
{
"Hành động": "TẠO",
"ResourceRecordSet": {
"Tên": "_1234567890abcdef1234567890abcdef.mydomain01.com.",
"Loại": "CNAME",
"TTL": 300,
"Bản ghi tài nguyên": [
{
"Giá trị": "_1234567890abcdef1234567890abcdef.weirdchars.acm-validations.aws."
}
]
}
}
]
}
aws route53 change-resource-record-sets --hosted-zone-id Z123456789EXAMPLE0SKX \
--change-batch "file://$(pwd)/change-batch.cert.json
- phản hồi tương tự như khi tạo bản ghi ở trên
- LƯU Ý: Có thể mất vài phút để ACM xác thực chứng chỉ.
tạo bản phân phối CloudFront
- Mặt trận đám mây AWS
tạo-phân phối
tài liệu
- lần nữa,
Người gọi tham khảo
phải đơn giản là một chuỗi duy nhất; sử dụng ví dụ ngày '+%Y%m%d-%H%M%S'
trong shell để tạo và sao chép vào tệp; xem tạo vùng lưu trữ
- như trước đây, hãy sử dụng tệp cục bộ tạm thời
tạo-phân phối.json
cho các giá trị phức tạp; nội dung bên dưới
Phiên bản giao thức tối thiểu
: lấy giá trị từ bài viết AWS này
OriginProtocolPolicy
: sử dụng chỉ http
bởi vì nguồn gốc (bộ chứa S3) chỉ có thể làm http
ViewerProtocolPolicy
: sử dụng chuyển hướng đến https
vì toàn bộ mục đích của việc tạo bản phân phối này là để chuyển hướng từ http
đến https
- LƯU Ý: Tôi không biết (và tài liệu AWS không cho biết) trường nào bắt buộc phải có; lệnh AWS CLI hiển thị một thông báo rõ ràng và chi tiết nếu có điều gì đó về dữ liệu đã gửi bị thiếu hoặc sai.
{
"CallerReference": "20210802-191725",
"Bí danh": {
"Số lượng: 2,
"Mục": ["mydomain01.com", "*.mydomain01.com"]
},
"Nguồn gốc": {
"Số lượng: 1,
"Vật phẩm": [
{
"Id": "mydomain01.com.s3.us-east-1.amazonaws.com_20210802-191725",
"Tên miền": "mydomain01.com.s3.us-east-1.amazonaws.com",
"CustomOriginConfig": {
"Cổng HTTP": 80,
"HTTPSPort": 443,
"OriginProtocolPolicy": "chỉ http"
}
}
]
},
"Nhóm gốc": {
"Số lượng": 0
},
"Hành vi mặc địnhCache": {
"TargetOriginId": "mydomain01.com.s3.us-east-1.amazonaws.com_20210802-191725",
"Giá trị được chuyển tiếp": {
"Chuỗi truy vấn": sai,
"Bánh quy": {
"Chuyển tiếp": "không"
},
"Tiêu đề": {
"Số lượng": 0
},
"QueryStringCacheKeys": {
"Số lượng": 0
}
},
"Người ký đáng tin cậy": {
"Đã bật": sai,
"Số lượng": 0
},
"ViewerProtocolPolicy": "chuyển hướng đến https",
"MinTTL": 0,
"Phương thức được phép": {
"Số lượng: 2,
"Vật phẩm": [
"CÁI ĐẦU",
"ĐƯỢC"
],
"Phương thức lưu trữ": {
"Số lượng: 2,
"Vật phẩm": [
"CÁI ĐẦU",
"ĐƯỢC"
]
}
},
"SmoothStreaming": sai,
"TTL mặc định": 86400,
"TTL tối đa": 31536000,
"Nén": sai,
"LambdaFunctionAssociations": {
"Số lượng": 0
},
"FieldLevelEncryptionId": ""
},
"Hành vi bộ đệm": {
"Số lượng": 0
},
"CustomErrorResponses": {
"Số lượng": 0
},
"Bình luận": "",
"Ghi nhật ký": {
"Đã bật": sai,
"Bao gồmCookies": sai,
"Gầu múc": "",
"Tiếp đầu ngữ": ""
},
"PriceClass": "PriceClass_All",
"Đã bật": đúng,
"Chứng chỉ người xem": {
"ACMCertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/12345678-90ab-cdef-1234-1234567890ab",
"MinimumProtocolVersion": "TLSv1.2_2021",
"SSLSupportMethod": "chỉ sni"
},
"Những hạn chế": {
"Giới hạn địa lý": {
"Loại hạn chế": "không",
"Số lượng": 0
}
},
"WebACLId": "",
"Phiên bản http": "http2",
"IsIPV6Enabled": đúng
}
- vỏ lệnh:
- LƯU Ý: thêm
--no-cli-máy nhắn tin
để vô hiệu hóa phân trang và lưu trữ phản hồi trong tệp cục bộ tạm thời để kiểm tra
aws --no-cli-pager tạo phân phối trên nền tảng đám mây \
--distribution-config "file://$(pwd)/create-distribution.json"
> tạo-phân phối.response.json
- phản hồi: một cấu trúc JSON lớn, chủ yếu là cấu hình được gửi cùng với một số thông tin meta phân phối
Hiểu rồi: Phân phối CloudFront mất một chút thời gian để triển khai.
bên trong phân phối tổng quan, có một Sửa đổi lần cuối trường cho biết triển khai trong một thời gian sau mỗi lần thay đổi; tùy thuộc vào độ rộng của cửa sổ trình duyệt và màn hình, trường này có thể bị ẩn, vì vậy giao diện người dùng có thể trông giống như bản phân phối đang hoạt động trong khi thực tế thì không phải vậy.
phân phối thử nghiệm
- được
Tên miền
từ phản hồi
jq -r '.Distribution.DomainName' tạo-phân phối.response.json
abcdefghij1234.cloudfront.net
http://abcdefghij1234.cloudfront.net
HTTP/1.1 301 được di chuyển vĩnh viễn
Kết nối: giữ nguyên
Độ dài nội dung: 183
Loại nội dung: văn bản/html
Ngày: Thứ Hai, 02 Tháng 8 năm 2021 20:14:27 GMT
Vị trí: https://abcdefghij1234.cloudfront.net/
Máy chủ: CloudFront
Qua: 1.1 8640a37b586353bc916562c577770223.cloudfront.net (CloudFront)
X-Amz-Cf-Id: ooT0Y1QvDE7_yoRmb0p0Un2Db6O713rBvudtmz1xer7YwEU0GE8smw==
X-Amz-Cf-Pop: HAM50-C2
X-Cache: Chuyển hướng từ đám mây
<html>
<head><title>301 Đã di chuyển vĩnh viễn</title></head>
<body bgcolor="white">
<center><h1>301 Đã di chuyển vĩnh viễn</h1></center>
<hr><center>CloudFront</center>
</body>
</html>
Vì vậy, phân phối chuyển hướng từ http://abcdefghij1234.cloudfront.net
đến https://abcdefghij1234.cloudfront.net
- như là nó phải như thế; đó là những gì nó được tạo ra cho.
HTTP/1.1 403 bị cấm
Kết nối: giữ nguyên
Loại nội dung: ứng dụng/xml
Ngày: Thứ Hai, ngày 02 tháng 8 năm 2021 20:14:35 GMT
Máy chủ: AmazonS3
Mã hóa truyền: chunked
Qua: 1.1 c3e656776c8a9f0e1ea24405ab1dcc85.cloudfront.net (CloudFront)
X-Amz-Cf-Id: or4SC8urWEv_8c3jDURv5IINwFU1TDVLSQ3_X7tya7Ncz8ujyz0-IQ==
X-Amz-Cf-Pop: HAM50-C2
X-Cache: Lỗi từ cloudfront
vùng x-amz-xô: chúng tôi-đông-1
<?xml version="1.0" encoding="UTF-8"?>
<Lỗi>
<Code>Truy cập bị từ chối</Code>
<Message>Truy cập bị từ chối</Message>
<RequestId>EAST1CM5WJR8QM3S</RequestId>
<HostId>zF2dJm2vsuSM633NHuzcA5VqrCrNkfYGu31FRmKKIkebuI5+6l5DlVnr4kk9be262hcqktoiROw=</HostId>
</Lỗi>
- (xml được định dạng để dễ đọc)
Điều đó không có vẻ tốt. Không chắc liệu điều đó có được mong đợi không?!?
Cập nhật bản ghi AWS Route 53
- thay đổi từ sử dụng bộ chứa S3 sang sử dụng phân phối CloudFront
- như trước đây, hãy tạo một tệp cục bộ tạm thời
thay đổi-batch.apex.updatejson
qua sed
ing các tập tin trước đó thay đổi-batch.apex.json
- sử dụng
UPSERT
thay vì TẠO RA
: Bản ghi đã tồn tại và phải được cập nhật.
HostedZoneId
: thay thế giá trị cũ Z3AQBSTGFYJSTF
(đối với S3) bởi Z2FDTNDATAQYW2
, một số giá trị kỳ diệu được lấy từ thay-đổi-tài-liệu-bộ
tài liệu
Tên DNS
: trích dẫn từ thay-đổi-tài-liệu-bộ
tài liệu
Chỉ định tên miền mà CloudFront đã chỉ định khi bạn tạo bản phân phối của mình.
Bản phân phối CloudFront của bạn phải bao gồm một tên miền thay thế khớp với tên của bộ bản ghi tài nguyên. Ví dụ: nếu tên của tập hợp bản ghi tài nguyên là acme.example.com, thì bản phân phối CloudFront của bạn phải bao gồm acme.example.com làm một trong các tên miền thay thế.
-> thay thế s3-website-us-east-1.amazonaws.com
(đối với S3) bởi abcdefghij1234.cloudfront.net
:
sed -e 's|CREATE|UPSERT|g' \
-e 's|Z3AQBSTGFYJSTF|Z2FDTNDATAQYW2|g' \
-e 's|s3-website-us-east-1.amazonaws.com|abcdefghij1234.cloudfront.net|g' \
change-batch.apex.json > change-batch.apex.update.json
{
"Thay đổi": [
{
"Hành động": "UPSERT",
"ResourceRecordSet": {
"Tên": "mydomain01.com.",
"Loại": "A",
"Mục tiêu bí danh": {
"HostedZoneId": "Z2FDTNDATAQYW2",
"DNSName": "abcdefghij1234.cloudfront.net",
"Đánh giá sức khỏe mục tiêu": sai
}
}
}
]
}
aws route53 thay đổi-resource-record-sets \
--hosted-zone-id Z123456789EXAMPLE0SKX \
--change-batch "file://$(pwd)/change-batch.apex.update.json"
- phản hồi tương tự như khi tạo bản ghi ở trên
kiểm tra bản ghi tên miền apex
http://mydomain01.com
HTTP/1.1 301 được di chuyển vĩnh viễn
Kết nối: giữ nguyên
Độ dài nội dung: 183
Loại nội dung: văn bản/html
Ngày: Thứ Hai, ngày 02 tháng 8 năm 2021 19:08:27 GMT
Vị trí: https://mydomain01.com/
Máy chủ: CloudFront
Qua: 1.1 2408979685aa1bdb752824d292e63bf7.cloudfront.net (CloudFront)
X-Amz-Cf-Id: Ww60Ol_0fdR8SsgcHeRYUd_de1rVejX6w_wuK80aR21e3IHstB-irA==
X-Amz-Cf-Pop: HAM50-C2
X-Cache: Chuyển hướng từ đám mây
<html>
<head><title>301 Đã di chuyển vĩnh viễn</title></head>
<body bgcolor="white">
<center><h1>301 Đã di chuyển vĩnh viễn</h1></center>
<hr><center>CloudFront</center>
</body>
</html>
- phản hồi hiện đến từ CloudFront và không còn từ S3 nữa, do đó, bản ghi DNS được cập nhật dường như hoạt động :-)
- kiểm tra
http
với một con đường
http http://mydomain01.com/some/path
... đầu ra tương tự như trên ...
--> có vẻ tốt
http://mydomain01.com
HTTP/1.1 403 bị cấm
Kết nối: giữ nguyên
Loại nội dung: ứng dụng/xml
Ngày: Thứ Hai, ngày 02 tháng 8 năm 2021 18:53:51 GMT
Máy chủ: AmazonS3
Mã hóa truyền: chunked
Qua: 1.1 ea89c67081222c8c680e7a37ad75f4f0.cloudfront.net (CloudFront)
X-Amz-Cf-Id: 5prv5_g5zXOX3aRBp2Gq64JJPuwC2o5dHIp9RCAHm6Ls8hK6EFghXw==
X-Amz-Cf-Pop: HAM50-C2
X-Cache: Lỗi từ cloudfront
vùng x-amz-xô: chúng tôi-đông-1
<?xml version="1.0" encoding="UTF-8"?>
<Lỗi>
<Code>Truy cập bị từ chối</Code>
<Message>Truy cập bị từ chối</Message>
<RequestId>T78ASF3FA9QGV4T5</RequestId>
<HostId>xaEgwEtbeesL4XfxMdxVoPAt9Lpb1ZDM9Fs5W4htBbcWNbV9sMUTjVAPIuWwAQ3Xh1yRhh4b4Ts=</HostId>
</Lỗi>
- (như trước đây, định dạng xml để dễ đọc)
LƯU Ý: Phản hồi này đến từ AmazonS3
, không phải từ CloudFront
như cái trước. Bộ chứa S3 không có giới hạn truy cập nào tại chỗ - vậy làm sao có thể có truy cập bị từ chối ?!?
kiểm tra kỹ quyền truy cập nhóm
aws s3api get-bucket-policy --bucket mydomain01.com
Đã xảy ra lỗi (NoSuchBucketPolicy) khi gọi thao tác GetBucketPolicy: Chính sách bộ chứa không tồn tại
Phù hợp với chỗ trống Chính sách nhóm trường trong Bảng điều khiển AWS S3 - nhưng có thực sự ổn không khi không có chính sách bộ chứa nào cả?!?
Bây giờ nhìn lại phân phối thử nghiệm ở trên, tôi thấy rằng phản hồi để truy cập abcdefghij1234.cloudfront.net
trực tiếp cũng đến từ S3, không phải từ CloudFront, vì vậy vấn đề có vẻ khá rõ ràng:
Câu hỏi của tôi #2
- Tại sao bộ chứa S3 từ chối quyền truy cập?
- Việc nhóm S3 hoàn toàn không có chính sách truy cập có phải là điều bình thường không? Thường không có chính sách nhóm "công khai" cho phép truy cập rõ ràng đối với bất kỳ ai?
- tương tự như một nhóm S3 trên mỗi apex/tên miền phụ, tôi có cần một bản phân phối CloudFront cho mỗi apex/miền phụ không?
- Nếu vậy, tôi đoán thêm
*.mydomain01.com
làm miền thay thế cho chứng chỉ (và phân phối) không thực sự có ý nghĩa gì, phải không?!? Tôi cũng cần một chứng chỉ cho mỗi bản phân phối, dành riêng cho một miền, đúng không?