Java 요청은 여러 프록시 입력을 만날 수 있습니다. 명시적 클라이언트 구성, 기본 선택기, JVM 네트워킹 속성, 지원되는 운영체제 설정입니다. 로그에 예기치 않게 SOCKS가 언급되면 어떤 입력이 그것을 선택했는지 파악하세요.

기본 선택기를 사용하는 코드라면 정확한 목적지에 대한 결정을 확인하세요:

URI target = URI.create("https://example.com/");
ProxySelector selector = ProxySelector.getDefault();
if (selector != null) {
    System.out.println(selector.select(target));
}

이것은 선택기의 후보를 보고합니다. 어떤 연결이 최종적으로 성공했는지 증명하지 않으며, 자체 명시적 경로를 가진 클라이언트는 다른 선택을 할 수 있습니다.

실제 적용되는 설정 확인

http.proxyHost, https.proxyHost, socksProxyHost, 해당 포트, java.net.useSystemProxies를 검토하세요. JDK 네트워킹 속성 문서는 이들의 범위와 우선순위를 설명합니다. 시스템 프록시 검색은 시작 시 확인되므로 JVM을 시작할 때 의도적으로 설정하세요.

과거 답변들은 오래된 Windows 대화상자와 오래된 JDK의 특정 조합을 설명합니다. 그런 보고서는 우회 방법의 기원을 설명할 수 있지만 현재 런타임에 같은 버그가 있다는 것을 입증하지는 않습니다. 모든 애플리케이션의 운영체제 설정을 변경하기 전에 런타임 버전과 선택기 출력을 기록하세요.

애플리케이션이 한 클라이언트에 HTTP 프록시가 필요하다면 명시적 프록시 구성이 그 요구를 더 분명히 할 수 있습니다. 중앙 자동 라우팅이 필요하다면 선택기가 예기치 않은 SOCKS 항목을 받거나 반환한 이유를 조사하세요.

사용자 지정 선택기는 의도된 우회와 실패 처리를 보존해야 합니다. 모든 SOCKS 후보를 무차별적으로 필터링하면 원래 사용해야 했던 연결이 끊길 수 있습니다. 확인할 수 있는 가장 작은 범위로 잘못된 규칙을 수정하세요.

관련 글