通过Nginx代理使用Java SDK访问OSS时如何配置

当通过 Nginx 代理使用 Java SDK 调用 OSS 接口时,需正确配置 SDK 的代理参数,同时确保 Nginx 代理不会自动添加或覆盖关键请求头(如 Content-Type等),否则会导致服务端返回 403 错误。本文介绍如何正确配置 Nginx 反向代理规则,以及如何初始化阿里云 OSS Java SDK。

配置说明

Nginx代理配置

推荐在/etc/nginx/conf.d/目录下创建独立的.conf配置文件(如 oss-proxy.conf),编辑代理规则并保存。

server { 
    listen 80; 
    server_name 服务器ip; 
    client_max_body_size 100M; 
    location / { 
        # 请按实际修改bucketName。
        proxy_pass http://bucketName.oss-cn-hangzhou.aliyuncs.com; 
        proxy_set_header Host bucketName.oss-cn-hangzhou.aliyuncs.com; 
    } 
}

配置完成后,请先运行nginx -t验证语法,再执行nginx -s reload命令重新加载配置,使更改生效。

Java SDK初始化配置

初始化客户端时,需通过setProxyHost、setProxyPort方法设置代理服务器地址和端口。

String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
//DefaultCredentialProvider credentialsProvider = CredentialsProviderFactory.newDefaultCredentialProvider("ak","sk");
// 填写Bucket名称。
String bucketName = "bucketName";
// 填写Object完整路径,完整路径中不能包含Bucket名称。
String objectName = "test/1.txt";
String region = "cn-hangzhou";
// 创建OSSClient实例。
//OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// 开启二级域名访问OSS,默认不开启。OSS Java SDK 2.1.2及之前的版本需要设置此值,OSS Java SDK 2.1.2及之后的版本会自动检测到IP地址,不需要再设置此值。
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
clientBuilderConfiguration.setProxyHost("代理服务ip");
clientBuilderConfiguration.setProxyPort(80);
OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)
        .build();

结果验证

配置完成后,通过Java SDK上传文件到OSS。文件上传成功表示配置正确。

image

相关文档

通过ECS反向代理访问OSS