靜態(tài)網(wǎng)站托管
靜態(tài)網(wǎng)站是指所有的網(wǎng)頁(yè)都由靜態(tài)內(nèi)容構(gòu)成,包括客戶端執(zhí)行的腳本(例如JavaScript)。您可以通過(guò)靜態(tài)網(wǎng)站托管功能將您的靜態(tài)網(wǎng)站托管到云盒Bucket,并使用該Bucket的訪問(wèn)域名訪問(wèn)這個(gè)網(wǎng)站。
前提條件
僅華東1(杭州)、華南1(深圳)、華南2(河源)、華北2(北京)、西南1(成都)地域支持使用OSS ON云盒服務(wù)。
已購(gòu)買云盒。具體操作,請(qǐng)參見(jiàn)購(gòu)買云盒。
使用說(shuō)明
配置靜態(tài)網(wǎng)站托管時(shí),您需要指定網(wǎng)站的默認(rèn)首頁(yè)和默認(rèn)404頁(yè):
默認(rèn)首頁(yè)是您通過(guò)瀏覽器訪問(wèn)靜態(tài)網(wǎng)站域名時(shí),OSS返回的網(wǎng)站首頁(yè)。
您為默認(rèn)首頁(yè)指定的文件必須是Bucket根目錄下允許被匿名訪問(wèn)的文件。如果您還開(kāi)通了子目錄首頁(yè),則子目錄下也應(yīng)存在此文件。
默認(rèn)404頁(yè)是您通過(guò)瀏覽器訪問(wèn)Bucket內(nèi)文件出現(xiàn)404錯(cuò)誤時(shí),OSS返回的錯(cuò)誤頁(yè)面。
您為默認(rèn)404頁(yè)指定的文件必須是Bucket根目錄下允許被匿名訪問(wèn)的文件。
您可以通過(guò)將默認(rèn)首頁(yè)或者默認(rèn)404頁(yè)中指定文件的讀寫權(quán)限ACL設(shè)置為public-read
,確保該文件允許匿名訪問(wèn)。有關(guān)設(shè)置文件讀寫權(quán)限ACL的具體步驟,請(qǐng)參見(jiàn)設(shè)置Object ACL。
配置示例
為云盒Bucket開(kāi)啟靜態(tài)網(wǎng)站托管后,您需要將與默認(rèn)首頁(yè)名稱相同的文件(例如index.html)上傳至目標(biāo)Bucket,如果Bucket中包含了目錄結(jié)構(gòu)subdir/,則目錄層級(jí)下也必須包含index.html文件。此外,您還需要將與默認(rèn)404頁(yè)名稱相同的文件(例如error.html)上傳至云盒Bucket。云盒Bucket的文件結(jié)構(gòu)如下所示:
Bucket
├── index.html
├── error.html
├── example.txt
└── subdir/
└── index.html
操作步驟
使用OSS控制臺(tái)
設(shè)置靜態(tài)網(wǎng)站頁(yè)面。
未開(kāi)通子目錄首頁(yè)
結(jié)合以上配置示例可知,當(dāng)您希望訪問(wèn)子目錄subdir/時(shí),不支持跳轉(zhuǎn)至子目錄下的index.html頁(yè)面,而是跳轉(zhuǎn)至根目錄下的index.html頁(yè)面。此外,當(dāng)訪問(wèn)Bucket內(nèi)不存在的文件時(shí),返回默認(rèn)錯(cuò)誤頁(yè)面。具體配置步驟如下:
在左側(cè)導(dǎo)航欄,選擇 ,然后在Bucket列表中單擊目標(biāo)Bucket。
在左側(cè)導(dǎo)航欄,選擇
。在靜態(tài)頁(yè)面,單擊設(shè)置,按如下說(shuō)明配置各項(xiàng)參數(shù)。
參數(shù)
說(shuō)明
默認(rèn)首頁(yè)
默認(rèn)首頁(yè)是您通過(guò)瀏覽器訪問(wèn)靜態(tài)網(wǎng)站域名時(shí),OSS返回的網(wǎng)站首頁(yè)。此處設(shè)置為index.html。
子目錄首頁(yè)
選擇不開(kāi)通,此時(shí)訪問(wèn)靜態(tài)網(wǎng)站根域名或者根域名下任何一個(gè)以正斜線(/)結(jié)尾的URL都會(huì)返回根目錄默認(rèn)首頁(yè)。
默認(rèn)404頁(yè)
訪問(wèn)Bucket內(nèi)文件出現(xiàn)404錯(cuò)誤時(shí),OSS返回的錯(cuò)誤頁(yè)面。默認(rèn)404頁(yè)僅支持根目錄下的文件。此處設(shè)置為error.html。
錯(cuò)誤文檔響應(yīng)碼
您可以配置返回錯(cuò)誤文檔時(shí)的HTTP響應(yīng)碼為404或200。
單擊保存。
已開(kāi)通子目錄首頁(yè)
結(jié)合以上配置示例可知,您希望訪問(wèn)子目錄subdir/時(shí),支持直接跳轉(zhuǎn)至子目錄下的index.html頁(yè)面。此外,當(dāng)訪問(wèn)Bucket內(nèi)不存在的文件時(shí),返回默認(rèn)錯(cuò)誤頁(yè)面,并通過(guò)文件404規(guī)則指定訪問(wèn)不存在文件時(shí)的返回結(jié)果。具體配置步驟如下:
在左側(cè)導(dǎo)航欄,單擊云盒Bucket,然后單擊目標(biāo)Bucket名稱。
在左側(cè)導(dǎo)航欄,選擇
。在靜態(tài)頁(yè)面,單擊設(shè)置,按如下說(shuō)明配置各項(xiàng)參數(shù)。
參數(shù)
說(shuō)明
默認(rèn)首頁(yè)
默認(rèn)首頁(yè)是您通過(guò)瀏覽器訪問(wèn)靜態(tài)網(wǎng)站域名時(shí),OSS返回的網(wǎng)站首頁(yè)。此處設(shè)置為index.html。
子目錄首頁(yè)
選擇開(kāi)通。開(kāi)通子目錄首頁(yè)后,訪問(wèn)靜態(tài)網(wǎng)站根域名時(shí),返回根目錄默認(rèn)首頁(yè)。訪問(wèn)根域名下以正斜線(/)結(jié)尾的URL時(shí)會(huì)返回對(duì)應(yīng)目錄的默認(rèn)首頁(yè)。例如,訪問(wèn)示例中的
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/subdir/
時(shí),則返回subdir/目錄下的默認(rèn)首頁(yè)文件index.html
。文件404規(guī)則
開(kāi)通子目錄首頁(yè)后,通過(guò)文件404規(guī)則決定訪問(wèn)不存在的Object時(shí)的返回結(jié)果。例如,訪問(wèn)
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/exampledir
,因示例中不存在exampledir文件,則根據(jù)設(shè)置的文件404規(guī)則返回對(duì)應(yīng)信息:Redirect(默認(rèn)值):檢查exampledir/index.html是否存在。
如果文件存在則返回302,并將訪問(wèn)請(qǐng)求重定向?yàn)?span data-tag="ph" id="codeph-aqp-me9-3dv" class="ph">
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/exampledir/index.html
。如果文件不存在則返回404,并繼續(xù)檢查
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/error.html
。如果error.html頁(yè)面也不存在該文件,則返回404狀態(tài)碼。
NoSuchKey:直接返回404,并繼續(xù)檢查
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/error.html
。Index:檢查exampledir/index.html是否存在。
如果文件存在則返回200,并直接返回文件內(nèi)容。
如果文件不存在,則繼續(xù)檢查
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/error.html
。
默認(rèn)404頁(yè)
訪問(wèn)Bucket內(nèi)文件出現(xiàn)404錯(cuò)誤時(shí),OSS返回的錯(cuò)誤頁(yè)面。默認(rèn)404頁(yè)僅支持根目錄下的文件。此處設(shè)置為error.html。
錯(cuò)誤文檔響應(yīng)碼
您可以配置返回錯(cuò)誤文檔時(shí)的HTTP響應(yīng)碼為404或200。
單擊保存。
創(chuàng)建并上傳默認(rèn)首頁(yè)。
當(dāng)您為examplebucket配置靜態(tài)網(wǎng)站托管時(shí)指定的默認(rèn)首頁(yè)為index.html,您需要將與默認(rèn)首頁(yè)名稱相同的文件上傳至examplebucket根目錄下。由于examplebucket中包含了子目錄subdir/,則子目錄subdir/下也必須包含index.html文件。
創(chuàng)建index.html文件。index.html文件配置示例如下:
<html> <head> <title>My Website Home Page</title> <meta charset="utf-8"> </head> <body> <p>Now hosted on OSS.</p> </body> </html>
將index.html文件保存至本地路徑。
分別將index.html文件上傳至examplebucket根目錄以及子目錄subdir下。上傳文件時(shí),您需要將文件讀寫權(quán)限設(shè)置為公共讀。
關(guān)于上傳文件的具體操作,請(qǐng)參見(jiàn)簡(jiǎn)單上傳。
創(chuàng)建并上傳默認(rèn)404頁(yè)。
當(dāng)您為examplebucket配置靜態(tài)網(wǎng)站托管時(shí)指定的默認(rèn)404頁(yè)為error.html,您需要將與默認(rèn)404頁(yè)名稱相同的文件上傳至examplebucket根目錄下。
創(chuàng)建error.html文件。error.html文件配置示例如下:
<html> <head> <title>Hello OSS!</title> <meta charset="utf-8"> </head> <body> <p>This is error 404 page.</p> </body> </html>
將error.html文件保存至本地。
將error.html文件上傳至examplebucket根目錄下。上傳文件時(shí),您需要將文件讀寫權(quán)限設(shè)置為公共讀。
使用阿里云SDK
僅支持通過(guò)Java SDK設(shè)置靜態(tài)網(wǎng)站托管,Java SDK要求3.15.0及以上版本。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.SetBucketWebsiteRequest;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
public class Demo {
public static void main(String[] args) throws Exception {
// 填寫云盒Bucket的數(shù)據(jù)域名。
String endpoint = "https://cb-f8z7yvzgwfkl9q0h****.cn-hangzhou.oss-cloudbox.aliyuncs.com";
// 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填寫云盒Bucket名稱,例如examplebucket。
String bucketName = "examplebucket";
// 填寫云盒Bucket所在地域。
String region = "cn-hangzhou";
// 填寫云盒ID。
String cloudBoxId = "cb-f8z7yvzgwfkl9q0h****";
// 創(chuàng)建OSSClient實(shí)例。
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
conf.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(new DefaultCredentialProvider(credentialsProvider.getCredentials()))
.clientConfiguration(conf)
.region(region)
.cloudBoxId(cloudBoxId)
.build();
try {
// 設(shè)置靜態(tài)網(wǎng)站托管。
SetBucketWebsiteRequest request = new SetBucketWebsiteRequest(bucketName);
// 設(shè)置靜態(tài)網(wǎng)站托管的默認(rèn)主頁(yè)。
request.setIndexDocument("index.html");
// 設(shè)置靜態(tài)網(wǎng)站托管的默認(rèn)404頁(yè)。
request.setErrorDocument("error.html");
ossClient.setBucketWebsite(request);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
使用命令行工具ossutil
關(guān)于使用ossutil設(shè)置靜態(tài)網(wǎng)站托管的具體步驟,請(qǐng)參見(jiàn)website(靜態(tài)網(wǎng)站托管及回源配置)。
使用REST API
如果您的程序自定義要求較高,您可以直接發(fā)起REST API請(qǐng)求。直接發(fā)起REST API請(qǐng)求需要手動(dòng)編寫代碼計(jì)算簽名。更多信息,請(qǐng)參見(jiàn)PutBucketWebsite。