View a markdown version of this page

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 클라이언트(AwsCrtHttpClient 및 AwsCrtAsyncHttpClient).

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

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

2NO_PROXY 환경 변수는 호스트 이름 간에 ‘|’ 및 ‘,’ 구분 기호의 조합을 지원합니다. 지원되는 와일드카드 형식은 섹션을 참조하세요nonProxyHosts 와일드카드 동작.

설정 조합 사용

코드, 시스템 속성 및 환경 변수에서 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 빌더는 useSystemPropertyValues 및 useEnvironmentVariablesValues라는 설정을 제공합니다. 기본적으로 두 설정은 모두 true입니다. true로 설정하면 SDK는 ProxyConfiguration 빌더를 통해 제공되지 않은 옵션에 대해 시스템 속성의 값 또는 환경 변수를 자동으로 사용합니다.

중요

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

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

// 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

nonProxyHosts 와일드카드 동작

를 사용하면 프록시를 우회하는 호스트를 지정할 nonProxyHosts수 있습니다. ProxyConfiguration 빌더, http.nonProxyHosts 시스템 속성 또는 NO_PROXY 환경 변수를 통해이 값을 설정합니다. 각 소스는 다음 항목 형식을 지원합니다.

  • 정확한 호스트: example.com (지정된 호스트와만 일치)

  • 선행 와일드카드: *.example.com (도메인 및 모든 하위 도메인과 일치)

  • 베어 와일드카드: * (모든 호스트 우회)

  • CIDR 범위: 10.0.0.0/8 (범위의 모든 IP 주소와 일치)

HTTP 클라이언트 간의 동작 차이

HTTP 클라이언트 유형과 항목 소스는 두 가지 중요한 일치 동작에 영향을 미칩니다.

외부 설정과 비교한 빌더 항목

ProxyConfiguration 빌더의 nonProxyHosts(Set) 또는 addNonProxyHost(String) 메서드를 통해 와일드카드 항목(*.example.com 또는 *)을 제공하는 경우 와일드카드는 CRT 기반 HTTP 클라이언트(AwsCrtHttpClient 및 )에서만 AWS 작동합니다AwsCrtAsyncHttpClient.

Apache, Netty및 URLConnection기반 클라이언트는 빌더를 통해 제공하는 와일드카드 항목에 PatternSyntaxException 대해를 발생시킵니다.

항목이 http.nonProxyHosts 시스템 속성 또는 NO_PROXY 환경 변수에서 오는 경우 와일드카드는 모든 클라이언트에서 작동합니다.

중요

모든 HTTP 클라이언트에서 와일드카드를 사용하려면 빌더 대신 http.nonProxyHosts 시스템 속성 또는 NO_PROXY 환경 변수를 사용합니다.

선행 와일드카드 항목에 대한 루트 도메인 일치

AWS CRT 기반 클라이언트와 다른 HTTP 클라이언트는 *.example.com 패턴을 다르게 처리합니다.

  • CRT 기반 클라이언트: 루트 도메인(example.com)과 하위 도메인(예: ) 모두*.example.com와 일치합니다api.example.com.

  • Apache, Netty및 URLConnection기반 클라이언트: 하위 도메인만 *.example.com 일치합니다. 루트 도메인example.com이 일치하지 않고 SDK가 프록시를 통해 라우팅합니다.

항목 소스별 와일드카드 동작 요약

다음 표에는 http.nonProxyHosts 시스템 속성 또는 NO_PROXY 환경 변수를 통해 항목을 제공할 때의 일치 동작이 요약되어 있습니다. 모든 클라이언트는 이러한 소스의 와일드카드를 지원합니다.

입력 형식 비CRT 클라이언트(Apache, Netty및 URLConnection) CRT 기반 클라이언트

정확한 호스트(example.com)

영예

영예

선행 와일드카드(*.example.com)

Honored(하위 도메인만 해당)

Honored(루트 도메인 및 하위 도메인)

베어 와일드카드(*)

영예

영예

CIDR 범위(10.0.0.0/8)

영예

영예