با فعالکردن میزبانی وبسایت ایستا روی یک باکت، میتوانید محتویات آن را از طریق مرورگر در اختیار کاربران قرار دهید. برای این کار ابتدا باید با باکت پالیسی دسترسی عمومی خواندن و لیست را روی باکت تنظیم کنید.
پس از اعمال پالیسی، درخواست به آدرس خام S3 (مانند https://sotoon-docs-static-website-example.s3.thr1.sotoon.ir) فهرست فولدرها و آبجکتها را با فرمت XML برمیگرداند؛ این خروجی برای کاربر نهایی خوانا نیست.
برای نمایش خواناتر محتویات باکت، میتوانید یک صفحهی ایندکس بسازید که همان فهرست را بهصورت لیست دایرکتوری نشان دهد. نمونهٔ همین باکت با ایندکس در آدرس https://sotoon-docs-static-website-example.s3-website.thr1.sotoon.ir/ قابل مشاهده است.
مراحل انجام کار به شرح زیر است:
۱- با باکت پالیسی دسترسی عمومی خواندن و لیست را تنظیم کنید. محتوای فایل public_policy.json را به شکل زیر ذخیره کنید:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPublicGet",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::sotoon-docs-static-website-example/*"
},
{
"Sid": "AllowPublicList",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::sotoon-docs-static-website-example"
}
]
}سپس پالیسی را روی باکت اعمال کنید:
aws s3api --endpoint=https://s3.thr1.sotoon.ir put-bucket-policy --bucket sotoon-docs-static-website-example --policy file://public_policy.json۲- یک index بنویسید که خروجی XML را parse کند.
<!DOCTYPE html>
<html>
<head>
<title>S3 Bucket Listing Generator</title>
</head>
<body>
<div id="navigation"></div>
<div id="listing"></div>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
var S3BL_IGNORE_PATH = false;
var BUCKET_NAME = 'sotoon-docs-static-website-example';
var BUCKET_URL = 'https://sotoon-docs-static-website-example.s3.thr1.sotoon.ir';
// var S3B_ROOT_DIR = '/';
var S3B_SORT = 'DEFAULT';
var EXCLUDE_FILE = 'index.html'; // change to array to exclude multiple files, regexp also supported e.g. /^(.*\/)?index.html$/ to exclude all index.html
var AUTO_TITLE = true;
</script>
<script type="text/javascript" src="https://rufuspollock.github.io/s3-bucket-listing/list.js"></script>
</body>
</html>۳- فایل index را در باکت قرار دهید.
aws s3 --endpoint=https://s3.thr1.sotoon.ir cp index.html s3://sotoon-docs-static-website-example/index.html --content-type text/html۴. کد مربوط به Static website hosting
aws s3 --endpoint=https://s3.thr1.sotoon.ir website s3://sotoon-docs-static-website-example/ --index-document index.html --error-document index.html۵. تنظیمات cors را وارد کنید. محتوای فایل cors_policy.json را به شکل زیر ذخیره کنید:
{
"CORSRules": [
{
"ID": "public",
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET"],
"AllowedOrigins": ["*"],
"ExposeHeaders": []
}
]
}سپس CORS را روی باکت اعمال کنید:
aws s3api --endpoint=https://s3.thr1.sotoon.ir put-bucket-cors --bucket sotoon-docs-static-website-example --cors-configuration file://cors_policy.json۶. اکنون میتوانید با دسترسی به آدرس https://sotoon-docs-static-website-example.s3-website.thr1.sotoon.ir یک لیست دایرکتوری داشته باشید.
نکته
توجه داشته باشید که این قابلیت فقط با آدرسهای زیر دامنهی وبسایت فعال است و آدرس خام S3 همواره خروجی XML را برمیگرداند.
