Vous pouvez configurer un bucket pour l'hébergement de site web statique et définir des règles de redirection (RoutingRule) pour le retour à la source par miroir. Une fois l'hébergement de site web statique activé, les requêtes adressées au site web équivalent à des requêtes envoyées au bucket. Vous pouvez également configurer des redirections automatiques vers une page d'index et une page d'erreur spécifiées. Les règles de redirection pour le retour à la source par miroir facilitent la migration transparente de vos données vers Object Storage Service (OSS).
Notes
Cette rubrique utilise le point de terminaison public de la région Chine (Hangzhou). Pour accéder à OSS depuis d'autres services Alibaba Cloud dans la même région, utilisez un point de terminaison interne. Pour plus de détails sur les régions et points de terminaison pris en charge, consultez Régions et points de terminaison.
Dans cette rubrique, les identifiants d'accès sont obtenus à partir des variables d'environnement. Pour plus d'informations, consultez Configuration des identifiants d'accès.
Cette rubrique illustre la création d'une instance OSSClient avec un endpoint OSS. Pour d'autres configurations, telles que l'utilisation d'un domaine personnalisé ou l'authentification avec des identifiants du Security Token Service (STS), consultez Configuration du client.
Pour configurer l'hébergement de site web statique ou le retour à la source par miroir, vous devez disposer de l'autorisation
oss:PutBucketWebsite. Pour récupérer la configuration de l'hébergement de site web statique ou du retour à la source par miroir, vous devez disposer de l'autorisationoss:GetBucketWebsite. Pour supprimer la configuration de l'hébergement de site web statique ou du retour à la source par miroir, vous devez disposer de l'autorisationoss:DeleteBucketWebsite. Pour plus d'informations, consultez Accorder des politiques d'accès personnalisées aux utilisateurs RAM.
Hébergement de site web statique
-
Configurer l'hébergement de site web statique
Le code suivant montre comment configurer l'hébergement de site web statique :
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.SetBucketWebsiteRequest; public class Demo { public static void main(String[] args) throws Exception { // The China (Hangzhou) Endpoint is used as an example. Specify the actual Endpoint. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Specify the bucket name. For example, examplebucket. String bucketName = "examplebucket"; // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou. String region = "cn-hangzhou"; // Create an OSSClient instance. // When the OSSClient instance is no longer needed, call the shutdown method to release its resources. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // Specify the bucket name. SetBucketWebsiteRequest request = new SetBucketWebsiteRequest(bucketName); // Set the default homepage for static website hosting. request.setIndexDocument("index.html"); // Set the default 404 page for static website hosting. 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(); } } } } -
Consulter la configuration de l'hébergement de site web statique
Le code suivant montre comment consulter la configuration de l'hébergement de site web statique :
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.BucketWebsiteResult; public class Demo { public static void main(String[] args) throws Exception { // The China (Hangzhou) Endpoint is used as an example. Specify the actual Endpoint. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Specify the bucket name. For example, examplebucket. String bucketName = "examplebucket"; // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou. String region = "cn-hangzhou"; // Create an OSSClient instance. // When the OSSClient instance is no longer needed, call the shutdown method to release its resources. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // Specify the bucket name. BucketWebsiteResult result = ossClient.getBucketWebsite(bucketName); // View the default homepage and default 404 page of the static website hosting configuration. System.out.println(result.getIndexDocument()); System.out.println(result.getErrorDocument()); } 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(); } } } } -
Supprimer la configuration de l'hébergement de site web statique
Le code suivant montre comment supprimer la configuration de l'hébergement de site web statique :
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; public class Demo { public static void main(String[] args) throws Exception { // The China (Hangzhou) Endpoint is used as an example. Specify the actual Endpoint. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Specify the bucket name. For example, examplebucket. String bucketName = "examplebucket"; // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou. String region = "cn-hangzhou"; // Create an OSSClient instance. // When the OSSClient instance is no longer needed, call the shutdown method to release its resources. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // Specify the bucket name. ossClient.deleteBucketWebsite(bucketName); } 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(); } } } }
Retour à la source par miroir
Le retour à la source par miroir est principalement utilisé pour migrer des données vers OSS en toute transparence. Par exemple, votre service peut s'exécuter sur votre propre serveur d'origine ou sur un autre produit cloud. Si vous souhaitez migrer le service vers OSS pour le développement de votre activité, vous devez vous assurer que le service continue de fonctionner pendant la migration. Durant celle-ci, vous pouvez utiliser des règles de retour à la source par miroir pour récupérer les données qui n'ont pas encore été migrées vers OSS. Cela garantit que votre service fonctionne comme prévu.
-
Configurer le retour à la source par miroir
Par exemple, lorsqu'un demandeur accède à un fichier qui n'existe pas dans le bucket de destination, vous pouvez spécifier des conditions de retour à la source et une URL d'origine pour récupérer le fichier objet depuis le serveur d'origine. Supposons que vous disposiez d'un bucket nommé examplebucket dans la région Chine (Hangzhou). Si un demandeur tente d'accéder à un fichier qui n'existe pas dans le répertoire examplefolder du répertoire racine du bucket, vous souhaitez que le demandeur puisse récupérer le fichier objet depuis le répertoire examplefolder du site https://www.example.com/.
Le code suivant montre comment configurer une règle de retour à la source par miroir pour le scénario précédent :
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.RoutingRule; import com.aliyun.oss.model.SetBucketWebsiteRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Demo { public static void main(String[] args) throws Exception { // The China (Hangzhou) Endpoint is used as an example. Specify the actual Endpoint. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Specify the bucket name. For example, examplebucket. String bucketName = "examplebucket"; // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou. String region = "cn-hangzhou"; // Create an OSSClient instance. // When the OSSClient instance is no longer needed, call the shutdown method to release its resources. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { SetBucketWebsiteRequest request = new SetBucketWebsiteRequest(bucketName); // The behavior when an object that does not exist and whose name does not end with a forward slash (/) is accessed. This takes effect after a default homepage is set. //request.setSubDirType(null); // Specifies whether to redirect to the default homepage of a subdirectory when the subdirectory is accessed. //request.setSupportSubDir(false); List<RoutingRule> routingRules = new ArrayList<RoutingRule>(); RoutingRule rule = new RoutingRule(); rule.setNumber(1); // Only objects with this prefix can match this rule. rule.getCondition().setKeyPrefixEquals("examplebucket"); // The rule is matched only if an HTTP status code of 404 is returned for a request to the specified object. rule.getCondition().setHttpErrorCodeReturnedEquals(404); // Specify the redirect type. rule.getRedirect().setRedirectType(RoutingRule.RedirectType.Mirror); // Specify the origin URL for mirroring-based back-to-origin. For example, https://www.example.com/. rule.getRedirect().setMirrorURL("<yourMirrorURL>"); //rule.getRedirect().setMirrorRole("AliyunOSSMirrorDefaultRole"); // Specifies whether to include request parameters when a redirection or mirroring-based back-to-origin rule is executed. rule.getRedirect().setPassQueryString(true); // This parameter has the same function as PassQueryString but has a higher priority. This parameter takes effect only when RedirectType is set to Mirror. rule.getRedirect().setMirrorPassQueryString(true); // Specify the status code to return for the redirection. This parameter takes effect only when RedirectType is set to External or AliCDN. //rule.getRedirect().setHttpRedirectCode(302); // Specify the domain name for the redirection. The domain name must be compliant with domain name specifications. //rule.getRedirect().setHostName("oss.aliyuncs.com"); // Specify the protocol for the redirection. This parameter takes effect only when RedirectType is set to External or AliCDN. //rule.getRedirect().setProtocol(RoutingRule.Protocol.Https); // During redirection, the object name is replaced with the value of ReplaceKeyWith. ReplaceKeyWith supports variables. //rule.getRedirect().setReplaceKeyWith("${key}.jpg"); // If this parameter is set to true, the prefix of the object name is replaced with the value of ReplaceKeyPrefixWith. rule.getRedirect().setEnableReplacePrefix(true); // During redirection, the prefix of the object name is replaced with this value. rule.getRedirect().setReplaceKeyPrefixWith("examplebucket"); // Specifies whether to check the MD5 hash of the back-to-origin body. This parameter takes effect only when RedirectType is set to Mirror. rule.getRedirect().setMirrorCheckMd5(true); RoutingRule.MirrorHeaders mirrorHeaders = new RoutingRule.MirrorHeaders(); // Specifies whether to pass through headers other than the following to the origin server. This parameter takes effect only when RedirectType is set to Mirror. mirrorHeaders.setPassAll(false); List passes = new ArrayList<String>(); passes.add("cache-control"); // Pass through the specified headers to the origin server. This parameter takes effect only when RedirectType is set to Mirror. mirrorHeaders.setPass(passes); List removes = new ArrayList<String>(); removes.add("content-type"); // Prohibit the pass-through of specified headers to the origin server. This parameter takes effect only when RedirectType is set to Mirror. mirrorHeaders.setRemove(removes); List sets = new ArrayList<Map<String, String>>(); Map header1 = new HashMap<String, String>(); header1.put("Key", "key1"); header1.put("Value", "value1"); Map header2 = new HashMap<String, String>(); header2.put("Key", "key2"); header2.put("Value", "value2"); sets.add(header1); sets.add(header2); // Set the headers to pass to the origin server. These headers are set for back-to-origin requests, regardless of whether they are included in the original request. mirrorHeaders.setSet(sets); // Specify the headers to include in back-to-origin requests. This parameter takes effect only when RedirectType is set to Mirror. rule.getRedirect().setMirrorHeaders(mirrorHeaders); routingRules.add(rule); request.setRoutingRules(routingRules); 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(); } } } } -
Récupérer la configuration du retour à la source par miroir
Le code suivant montre comment récupérer la configuration du retour à la source par miroir :
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.BucketWebsiteResult; public class Demo { public static void main(String[] args) throws Exception { // The China (Hangzhou) Endpoint is used as an example. Specify the actual Endpoint. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Specify the bucket name. For example, examplebucket. String bucketName = "examplebucket"; // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou. String region = "cn-hangzhou"; // Create an OSSClient instance. // When the OSSClient instance is no longer needed, call the shutdown method to release its resources. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { BucketWebsiteResult result = ossClient.getBucketWebsite(bucketName); result.getSubDirType(); // Get the ordinal number of the redirection or mirroring-based back-to-origin rule that is matched and executed. System.out.println(result.getRoutingRules().get(0).getNumber()); // Get the prefix that the rule matches. System.out.println(result.getRoutingRules().get(0).getCondition().getKeyPrefixEquals()); // Get the HTTP status code. System.out.println(result.getRoutingRules().get(0).getCondition().getHttpErrorCodeReturnedEquals()); // Get the suffix that the rule matches. System.out.println(result.getRoutingRules().get(0).getCondition().getKeySuffixEquals()); // Get the redirect type. System.out.println(result.getRoutingRules().get(0).getRedirect().getRedirectType()); // Get the carried request parameters. System.out.println(result.getRoutingRules().get(0).getRedirect().getMirrorPassQueryString()); // Get the origin URL for mirroring-based back-to-origin. System.out.println(result.getRoutingRules().get(0).getRedirect().getMirrorURL()); // Get the status code returned for the redirection. System.out.println(result.getRoutingRules().get(0).getRedirect().getHttpRedirectCode()); // Get the specified headers to pass through. System.out.println(result.getRoutingRules().get(0).getRedirect().getMirrorHeaders().getPass().get(0)); // Get the specified headers that are prohibited from being passed through. System.out.println(result.getRoutingRules().get(0).getRedirect().getMirrorHeaders().getRemove().get(0)); // Get the protocol for the redirection. System.out.println(result.getRoutingRules().get(0).getRedirect().getProtocol()); // Get the domain name for the redirection. System.out.println(result.getRoutingRules().get(0).getRedirect().getHostName()); // Get the value to replace the prefix of the object name during redirection. If the prefix is empty, this string is inserted at the beginning of the object name. System.out.println(result.getRoutingRules().get(0).getRedirect().getReplaceKeyPrefixWith()); // Get the replacement value for the object name specified by ReplaceKeyWith during redirection. ReplaceKeyWith supports variables. System.out.println(result.getRoutingRules().get(0).getRedirect().getReplaceKeyWith()); // Get the status code returned for the redirection. System.out.println(result.getRoutingRules().get(0).getRedirect().getHttpRedirectCode()); } 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(); } } } } -
Supprimer la configuration du retour à la source par miroir
Le code suivant montre comment supprimer la configuration du retour à la source par miroir :
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; public class Demo { public static void main(String[] args) throws Exception { // The China (Hangzhou) Endpoint is used as an example. Specify the actual Endpoint. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Specify the bucket name. For example, examplebucket. String bucketName = "examplebucket"; // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou. String region = "cn-hangzhou"; // Create an OSSClient instance. // When the OSSClient instance is no longer needed, call the shutdown method to release its resources. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // Specify the bucket name. ossClient.deleteBucketWebsite(bucketName); } 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(); } } } }
Références
Pour l'exemple de code complet relatif à l'hébergement de site web statique et au retour à la source par miroir, consultez l'exemple GitHub.
Pour plus d'informations sur l'opération API utilisée pour configurer l'hébergement de site web statique ou le retour à la source par miroir, consultez PutBucketWebsite.
Pour plus d'informations sur l'opération API utilisée pour récupérer la configuration de l'hébergement de site web statique ou du retour à la source par miroir, consultez GetBucketWebsite.
Pour plus d'informations sur l'opération API utilisée pour supprimer la configuration de l'hébergement de site web statique ou du retour à la source par miroir, consultez DeleteBucketWebsite.