프록시는 정확히 어떻게 작동합니까?


12

IP 100.100.100.100, 포트 80으로 연결하려면 컴퓨터가이 주소와 함께 tcp 패킷을 유선으로 보냅니다.

이제 200.200.200.200 포트 8080 (인터넷 익스플로러에서 설정할 수있는 프록시)과 같은 프록시 서버를 사용하는 경우이 프로세스는 어떻게 변경됩니까?

여전히 동일한 IP에 연결하려고 할 때 IP 헤더에 대상 IP 또는 프록시 IP 또는 둘 다가 포함됩니까?

나는 이미 googled했는데 프록시를 설정하는 방법을 알려주는 수백 페이지가 있지만 그 밑에서 어떻게 작동하는지는 설명하지 않습니다.

답변:


13

HTTP 요청은 클라이언트에서 프록시 서버의 포트 8080으로 전송됩니다. 그런 다음 프록시 서버는 대상 사이트에 대한 새로운 HTTP 요청을 시작합니다. 구성에 따라 프록시는 종종 "X-Forwarded-For"헤더를 HTTP 요청에 추가합니다. 대상 웹 사이트의 로그 파일에는 프록시의 IP 주소가 표시되지만 "X-Forwarded-For"주소를 기록하도록 구성되거나 구성되지 않을 수 있습니다.

이것이 일반적인 구성이지만 프록시 소프트웨어는 모든 종류의 사용자 정의를 허용합니다.

편집 : 나는 원래 귀하의 질문을 읽을 때 오징어 또는 nginx와 같은 HTTP 프록시에 대해 구체적으로 묻는 아이디어를 얻었습니다. 사용 가능한 여러 유형의 프록시가 있습니다. Internet Explorer에서는 HTTP 프록시를 사용하고있을 가능성이 있지만 다른 유형도 많이 있습니다.


예, 프록시 서버로 사용하는 소프트웨어와 구성 방법에 따라 다릅니다. 예를 들어 Nginx 용 HttpProxyModule을 참조하십시오. wiki.nginx.org/HttpProxyModule
entropo

3
요청이 프록시 서버로만 전송 된 경우 프록시는 연결하려는 대상 주소를 어떻게 알 수 있습니까? 프록시가 http 수준 또는 tcp 수준에서 작동합니까?
cody

프록시에 요청하는 브라우저는 전체 URI를 요청합니다. 그런 다음 프록시 서버는 DNS 조회를 수행하고 대상 사이트에 대한 자체 HTTP 요청을 시작합니다.
emgee

1
Squid와 같은 http 프록시 (응답을 기반으로 한)는 응용 프로그램 계층에서 작동합니다.
emgee

1
@emgee : HTTP 프로토콜에도 CONNECT 메소드가 있으므로 HTTP 프록시를 통해 TCP 서버에 연결할 수 있으며 (프록시가 허용하는 경우) TCP 서버는 HTTP를 말하는 서버 일 필요는 없습니다.
vtest

2

HTTP는 Layer 7 프로토콜이므로 혼동하지 마십시오. HTTP 프록시를 사용하고 google.com이라고 입력하면 HTTP 헤더는 여전히 google.com과 동일하지만 대상 IP 주소는 프록시의 IP 주소이며 소스는 사용자 정의 포트 번호 8080의 호스트 IP입니다.


1

HTTP 프록시를 사용하려면 요청이 클라이언트에서 대상 서버가 아닌 프록시 서버의 IP 주소로 전송됩니다. 그런 다음 프록시는 HTTP 헤더읽고 request-URI 를 추출 해야합니다 . 요청 URI는 대상 서버의 이름 또는 IP를 포함하며 프록시 서버는 해당 정보를 사용하여 요청을 전달합니다.

HTTP 스펙 (요청이 해당 서버로 직접 전송 된 경우 이러한 불필요한 것 때문에) 프록시를 사용하지 않는 서버 이름과 포트를 제외하도록 요청 줄 수 있습니다. 그러나 사양에 따라 ...

요청이 프록시에 작성 될 때 absoluteURI 양식이 필요합니다.

따라서 프록시를 사용하지 않는 경우 요청 라인은 다음과 같습니다.

GET /robots.txt HTTP/1.1

그러나 프록시를 사용하려면 라인에 서버 이름 (및 80이 아닌 경우 포트)이 포함되어야합니다.

GET http://httpbin.org:80/robots.txt HTTP/1.1

프록시 서버가 사전 설정된 요청 소켓을 통해 그대로 그대로 응답을 릴레이 할 수 있으므로 조작이 더 단순 할 경우 응답 측입니다.


"HTTP 결정적인 가이드", pg. 145 : "HTTP / 1.1에서는 이제 서버가 프록시 및 서버 요청 모두에 대한 전체 URI를 처리해야하지만 실제로는 배치 된 많은 서버가 여전히 부분 URI 만 허용합니다."
nobar

표준 접근 방식 Host은 아니지만 요청 줄에 절대 URI가 제공되지 않은 경우 프록시가 헤더를 사용하여 부분 URI를 완성 할 수도 있습니다 .
nobar

연결이 종단 간 암호화 (HTTPS) 인 경우이 방법이 작동하지 않습니다. security.stackexchange.com/questions/101721/…
nobar

-7

"tcp packet"과 같은 것은 없습니다. TCP는 데이터 스트림과 함께 작동합니다. IP 패킷이 있습니다.

네트워킹에 대한 기본 지식이 부족한 것 같습니다. TCP / IP에 대한 좋은 책을 얻는 것이 좋습니다. 모든 사람이 가장 좋아하는 것은 W. Richard Stevens의 "TCP / IP 그림"인 것 같습니다.

질문으로 돌아 가기

프록시는 중개인입니다.

[당신]-[프록시]-[연결하려는 서버]

이제 두 가지 연결이 있습니다.

[사용자]-(프록시에 대한 연결)-[프록시]-(프록시가 서버에 연결됨)-[연결하려는 서버]

프록시를 통해 서버에 연결한다고 생각하면 실제로 프록시에 연결하여 특정 서버에 도달하고 싶다고 말하는 것입니다. 그런 다음 프록시는 자신과 해당 서버 간의 두 번째 연결을 열고 데이터를 양방향으로 전달하는 중개인 역할을합니다.


13
TCP 패킷은 TCP 헤더 정보가 포함 된 IP 패킷입니다. 이것은 일반적인 용어입니다. 너무 무례하게 무례하지 마십시오. 당신도 동시에 틀 렸기 때문에 그것은 단지 당신에게 잘못 반영되고 있습니다.
Phil P
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.