HTTP 대상에는 소문자 http_proxy를 설정하세요. curl은 대문자 HTTP_PROXY를 의도적으로 무시합니다. POSIX 셸에서는 다음과 같이 지정합니다.

http_proxy=http://127.0.0.1:8080 curl http://example.com/
https_proxy=http://127.0.0.1:8080 curl https://example.com/

이 할당은 바로 뒤에 오는 명령에만 적용됩니다. 예제의 수신 주소를 자신의 프록시로 바꾸세요. 공개 엔드포인트를 비교하려면 HTTP 프록시 목록에서 후보를 선택할 수 있습니다. https_proxy 변수는 HTTPS 대상의 경로를 선택합니다. 값이 http://이면 여전히 대상으로 터널을 만들 수 있는 일반 HTTP 프록시를 뜻합니다. PowerShell과 Windows 명령 셸은 할당 구문이 다릅니다.

이 대문자 표기가 위험한 이유

CGI 환경은 들어오는 요청 헤더를 대문자 HTTP_ 변수로 변환할 수 있습니다. 따라서 Proxy라는 요청 헤더가 HTTP_PROXY가 될 수 있습니다. 이를 송신 연결 설정으로 신뢰하면 요청 데이터가 프록시를 선택하게 됩니다. curl의 소문자 요구 사항은 이 매핑을 피합니다. 이 예외는 HTTPS 및 다른 프로토콜 변수에 동일하게 적용되지 않습니다.

변수를 바꿔도 경로가 달라지지 않을 때

먼저 프로토콜별 변수를 찾고, 그다음 대체 설정인 ALL_PROXY를 확인하세요. 일치하는 NO_PROXY 규칙이 있으면 프록시를 우회할 수 있습니다. 소문자 형태와 서로 경쟁하는 정의도 영향을 줍니다. 다음 유닉스 계열 셸 루프는 자격 증명이 담길 수 있는 값을 출력하지 않고 변수의 존재 여부만 알립니다.

for name in http_proxy HTTP_PROXY https_proxy HTTPS_PROXY all_proxy ALL_PROXY no_proxy NO_PROXY; do
  if printenv "$name" >/dev/null; then
    printf '%s is set\n' "$name"
  fi
done

표시된 정의를 로컬에서 확인하세요. 어떤 정의가 다시 나타나면 실행한 셸, 서비스, IDE, 컨테이너 또는 CI 설정을 확인합니다. 변수가 존재한다는 것은 가능한 입력을 알려 줄 뿐, 어떤 값이 최종 적용됐는지는 알려 주지 않습니다.

이러한 프록시 선택에서 요청 하나를 분리하려면 엔드포인트와 빈 우회 목록을 모두 지정하세요.

curl --proxy http://127.0.0.1:8080 --noproxy '' --connect-timeout 5 --max-time 15 --verbose https://example.com/

직접 연결이 허용될 때 비교하려면 다음을 사용하세요.

curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/

이 명령들은 상속된 경로와 연결 실패를 구분하는 데 도움이 됩니다. 환경 설정을 더 바꾸기 전에 프록시 테스트 결과를 단계별로 해석하세요. curl의 변수 규칙은 curl에 적용하세요. 애플리케이션 자체 런타임은 프록시를 다른 방식으로 발견하고 통합할 수 있습니다.

관련 글