HTTP 프록시 구성 - AWS SDK for Java 2.x

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

HTTP 프록시 구성

코드를 사용하거나, Java 시스템 속성을 설정하거나, 환경 변수를 설정하여 HTTP 프록시를 구성할 수 있습니다.

코드로 구성

서비스 클라이언트를 빌드할 때 클라이언트별 ProxyConfiguration 빌더를 사용하여 코드로 프록시를 구성합니다. 다음 예제는 Amazon S3 서비스 클라이언트에서 사용하는 Apache 기반 HTTP 클라이언트의 프록시 구성 예제를 보여줍니다.

SdkHttpClient httpClient1 = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://proxy.example.com")) .username("username") .password("password") .addNonProxyHost("localhost") .build()) .build(); S3Client s3Client = S3Client.builder() .httpClient(httpClient) .build();

이 항목의 각 HTTP 클라이언트 단원에서는 프록시 구성 예제를 보여줍니다.

외부 설정을 사용하여 HTTP 프록시 구성

코드에서 ProxyConfiguration 빌더를 명시적으로 사용하지 않더라도 SDK는 외부 설정을 찾아 기본 프록시 구성을 구성합니다.

기본적으로 SDK는 먼저 JVM 시스템 속성을 검색합니다. 속성이 하나라도 발견되면 SDK는 값과 기타 시스템 속성 값을 사용합니다. 사용 가능한 시스템 속성이 없는 경우 SDK는 프록시 환경 변수를 찾습니다.

SDK는 다음 Java 시스템 속성 및 환경 변수를 사용할 수 있습니다.

Java 시스템 속성
시스템 속성 설명 HTTP 클라이언트 지원

http.proxyHost

HTTPS 프록시 서버의 호스트 이름

모두

http.proxyPort

HTTPS 프록시 서버의 포트 번호

모두

http.proxyUser

HTTPS 프록시 인증을 위한 사용자 이름

모두

http.proxyPassword

HTTPS 프록시 인증을 위한 비밀번호

모두

http.nonProxyHosts

프록시를 우회하여 직접 연결해야 하는 호스트 목록. 이 목록은 HTTPS를 사용하는 경우에도 유효합니다.

모두

https.ProxyHost

HTTPS 프록시 서버의 호스트 이름

Netty, CRT

https.ProxyPort

HTTPS 프록시 서버의 포트 번호

Netty, CRT

https.proxyUser

HTTPS 프록시 인증을 위한 사용자 이름

Netty, CRT
https.proxyPassword HTTPS 프록시 인증을 위한 비밀번호 Netty, CRT
환경 변수
환경 변수 설명 HTTP 클라이언트 지원
HTTP_PROXY1

HTTP의 스키마가 있는 유효한 URL

모두

HTTPS_PROXY1

HTTPS의 스키마가 있는 유효한 URL

Netty, CRT

NO_PROXY2

프록시를 우회하여 직접 연결해야 하는 호스트 목록. 목록은 HTTP와 HTTPS 모두에 유효합니다.

모두

모두: SDK에서 제공하는 모든 HTTP 클라이언트 - UrlConnectionHttpClient, ApacheHttpClient, NettyNioAsyncHttpClient, AwsCrtAsyncHttpClient

Netty: Netty 기반 HTTP 클라이언트(NettyNioAsyncHttpClient)

CRT: AWS CRT 기반 HTTP 클라이언트(AwsCrtHttpClientAwsCrtAsyncHttpClient)

1쿼리된 환경 변수는 HTTP_PROXY 또는 HTTPS_PROXY에 관계없이 클라이언트의 ProxyConfiguration에 있는 스키마 설정에 따라 달라집니다. 기본 스키마는 HTTP입니다. 다음 코드 조각은 스키마를 환경 변수 해결에 사용되는 HTTPS로 변경하는 방법을 보여줍니다.

SdkHttpClient httpClient = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .scheme("https") .build()) .build();

2NO_PROXY 환경 변수는 호스트 이름 간에 ‘|’ 및 ‘,’ 구분 기호의 조합을 지원합니다. 호스트 이름에는 ‘*’ 와일드카드가 포함될 수 있습니다.

설정 조합 사용

코드, 시스템 속성 및 환경 변수에서 HTTP 프록시 설정 조합을 사용할 수 있습니다.

예 - 시스템 속성과 코드로 제공되는 구성
// Command line with the proxy password set as a system property. $ java -Dhttp.proxyPassword=SYS_PROP_password -cp ... App // Since the 'useSystemPropertyValues' setting is 'true' (the default), the SDK will supplement // the proxy configuration in code with the 'http.proxyPassword' value from the system property. SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://localhost:1234")) .username("username") .build()) .build(); // Use the apache HTTP client with proxy configuration. DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(apacheHttpClient) .build();

SDK는 다음 프록시 설정을 해결합니다.

Host = localhost Port = 1234 Password = SYS_PROP_password UserName = username Non ProxyHost = null
예 - 시스템 속성과 환경 변수 모두 사용

각 HTTP 클라이언트의 ProxyConfiguration 빌더는 useSystemPropertyValuesuseEnvironmentVariablesValues라는 설정을 제공합니다. 기본적으로 두 설정은 모두 true입니다. true로 설정하면 SDK는 ProxyConfiguration 빌더를 통해 제공되지 않은 옵션에 대해 시스템 속성의 값 또는 환경 변수를 자동으로 사용합니다.

중요

이 시스템 속성은 환경 변수보다 우선합니다. HTTP 프록시 시스템 속성이 발견되면 SDK는 시스템 속성에서 모든 값을 검색하고 환경 변수에서는 검색하지 않습니다. 시스템 속성보다 환경 변수를 우선하도록 순위를 지정하려면 useSystemPropertyValuesfalse로 설정합니다.

이 예제에서는 런타임에서 다음 설정을 사용할 수 있습니다.

// System properties http.proxyHost=SYS_PROP_HOST.com http.proxyPort=2222 http.password=SYS_PROP_PASSWORD http.user=SYS_PROP_USER // Environment variables HTTP_PROXY="http://EnvironmentUser:EnvironmentPassword@ENV_VAR_HOST:3333" NO_PROXY="environmentnonproxy.host,environmentnonproxy2.host:1234"

서비스 클라이언트는 다음 문 중 하나를 사용해 만듭니다. 모든 문은 프록시 설정을 명시적으로 설정하지 않습니다.

DynamoDbClient client = DynamoDbClient.create(); DynamoDbClient client = DynamoDbClient.builder().build(); DynamoDbClient client = DynamoDbClient.builder() .httpClient(ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .build()) .build()) .build();

SDK는 다음 프록시 설정을 확인합니다.

Host = SYS_PROP_HOST.com Port = 2222 Password = SYS_PROP_PASSWORD UserName = SYS_PROP_USER Non ProxyHost = null

서비스 클라이언트에는 기본 프록시 설정이 있으므로 SDK는 시스템 속성을 검색한 다음 환경 변수를 검색합니다. 시스템 속성 설정이 환경 변수보다 우선하므로 SDK는 시스템 속성만 사용합니다.

다음 코드와 같이 시스템 속성의 사용이 false로 변경되면 SDK는 환경 변수만 해결합니다.

DynamoDbClient client = DynamoDbClient.builder() .httpClient(ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build()) .build();

HTTP를 사용하여 해결된 프록시 설정은 다음과 같습니다.

Host = ENV_VAR_HOST Port = 3333 Password = EnvironmentPassword UserName = EnvironmentUser Non ProxyHost = environmentnonproxy.host, environmentnonproxy2.host:1234