سرویس آبجکت‌استوریج می‌تواند از وب‌سایت‌های ایستا (static) میزبانی کند. وب‌سایت‌های ایستا دارای محتویات ایستا مانند عکس، صفحات html یا اسکریپت‌های سمت کاربر (مانند جاوااسکریپت) هستند. بدین صورت که با معرفی فایل اصلی HTML در تنظیمات باکت می‌توانید مشخص کنید آدرس اعلام شده از سمت شما به کدام آبجکت اشاره کند.

توجه کنید که سرویس آبجکت‌استوریج از وب‌سایت‌های پویا که شامل اسکریپت‌های سمت سرور مانند PHP و ASP.NET هستند، پشتیبانی نمی‌کند. برای استفاده از میزبانی وب‌سایت سرویس آبجکت‌استوریج باید یک باکت را که محتوی فایل‌های وب‌سایت است به این سرویس معرفی کنید.

نشانی وب‌سایت

زمانی که یک باکت را به عنوان وب‌سایت تنظیم می‌کنید، نشانی وب‌سایت شما با توجه به این‌که باکت شما در کدام دیتاسنتر قرار دارد به یکی از این دو شکل خواهد بود (به عبارت website در نشانی‌ها توجه کنید):

http://bucket-name.s3-website.thr2.sotoon.ir

http://bucket-name.s3-website.thr1.sotoon.ir

تنظیمات وب‌سایت

برای تنظیم یک باکت به عنوان وب‌سایت می‌توانید با استفاده از ابزار aws و دستور website به این شکل استفاده کنید. همین طور در نسخه جدید پنل استوریج می‌توانید از بخش تنظیمات باکت نیز این قابلیت را فعال کنید:

aws --endpoint http://KISE_ENDPOINT/ s3 website s3://my-bucket/ --index-document index.html --error-document error.html

استفاده از تنظیمات index-document و error-document اختیاری است.

تنظیمات Index-document: مقدار index-document به صورت پسوند به درخواست‌هایی که مربوط به یک دایرکتوری باشند، اضافه می‌شود. به عنوان مثال اگر شما برای وب‌سایتتان index.html را به عنوان index-document قرار داده باشید، و یک کاربر نشانی مربوط به دایرکتوری my-bucket/images را در مرورگر قرار دهد، فایل my-bucket/images/index.html باز خواهد شد. مقدار index-document نمی‌تواند حاوی / باشد.

تنظیمات error-document: نشانی فایلی که در صورت وقوع خطاهای 4xx باید برای کاربر نشان داده شود.

مشخص کردن نوع فایل‌ها

برای این‌که مرورگر بتواند فایل‌های شما را به درستی نمایش دهد، باید هدر Content-Type برای فایل‌های شما تنظیم شود. این مقدار را در زمان بارگذاری فایل‌ها می‌توانید از طریق مشخص کردن مقدار content-type، تنظیم کنید. برای مثال، بارگذاری یک فایل HTML به این صورت خواهد بود:

aws --endpoint-url http://KISE_ENDPOINT/ s3api put-object --bucket bucket-name --key index.html --body index.html --content-type text/html

تنظیمات دسترسی

برای این‌که وب‌سایت شما دسترسی عمومی داشته باشد، باید با استفاده از باکت پالیسی عملیات s3:GetObject (و در صورت نیاز s3:ListBucket) را برای کاربران ناشناس باز کنید.

نکته

امکان Public کردن باکت از طریق پنل وجود ندارد؛ اما همچنان می‌توانید باکت‌های Public قدیمی را در صورت نیاز Private کنید. در حال حاضر مدیریت کامل دسترسی‌ها از طریق Bucket Policy انجام می‌شود. توجه کنید که تغییر دسترسی باکت به تنهایی باعث private شدن آبجکت‌ها نمی‌شود و اگر آبجکت‌هایی به‌صورت public آپلود شده‌اند، باید آن‌ها را private کنید یا با استفاده از Bucket Policy، به‌صورت صریح (explicit deny) دسترسی آن‌ها را مسدود کنید.

در مثال زیر، به تمام کاربران احراز هویت‌شده (authenticated users) اجازه GetObject و PutObject داده شده است، اما به‌صورت صریح (explicit deny) دسترسی به یک مسیر خاص از آبجکت‌ها مسدود شده است:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowAuthenticatedUsersGetAndPut",
      "Effect": "Allow",
      "Principal": "*",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Condition": {
        "StringEquals": {
          "aws:PrincipalType": "AuthenticatedUser"
        }
      }
    },
    {
      "Sid": "ExplicitDenyPublicLegacyObjects",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::example-bucket/public/*"
    }
  ]
}

تنظیمات پیشرفته‌تر

برای تنظیمات پیشرفته‌تر وب‌سایت می‌توانید از دستور put-bucket-website استفاده کنید:

aws --endpoint http://KISE_ENDPOINT/ s3api put-bucket-website --bucket my-bucket --website-configuration file://website.json

یک مثال از فایل website.json:

{
  "ErrorDocument": {
    "Key": "string"
  },
  "IndexDocument": {
    "Suffix": "string"
  },
  "RedirectAllRequestsTo": {
    "HostName": "string",
    "Protocol": "http"|"https"
  },
  "RoutingRules": [
    {
      "Condition": {
        "HttpErrorCodeReturnedEquals": "string",
        "KeyPrefixEquals": "string"
      },
      "Redirect": {
        "HostName": "string",
        "HttpRedirectCode": "string",
        "Protocol": "http"|"https",
        "ReplaceKeyPrefixWith": "string",
        "ReplaceKeyWith": "string"
      }
   }
    ...
  ]
}

برای اطلاع دقیق از تنظیمات قابل استفاده در فایل website.json و نحوه استفاده از آن‌ها به این صفحه در مستندات ابزار aws مراجعه فرمایید.

مطالعه بیشتر:

راهنمای دریافت و مدیریت ACL آبجکت‌ها