원격 서버에서 remote1.myorg.io
웹 리소스(예: )에 액세스할 수 없습니다 http://spaa.acm.org/2020/SPAA2020TutorialProgram.pdf
. 따라서 원격 서버에서 ssh를 사용하여 127.0.0.0에 서버를 생성하고 요청을 로컬 시스템으로 다시 전달하여(그리고 로컬 시스템이 리소스를 얻도록 허용하여) 리소스에 액세스합니다. 이것이 내 로컬 컴퓨터에서 수행하는 작업입니다.
ssh -R 6050:spaa.acm.org:80 remote1.myorg.io
그럼 remote1.myorg.io
내가 할게
curl -v http://localhost:6050/2020/SPAA2020TutorialProgram.pdf
그러나 나는 얻는다
* About to connect() to localhost port 6050 (#0)
* Trying ::1...
* Connected to localhost (::1) port 6050 (#0)
> GET /2020/SPAA2020TutorialProgram.pdf HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost:6050
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Connection: Keep-Alive
< Content-Type: text/html
< Transfer-Encoding: chunked
< Date: Sun, 15 Nov 2020 00:41:45 GMT
< Server: LiteSpeed
<
내가 뭘 잘못했나요?
답변1
문제: spaa.acm.org 서버는 많은 웹 서버와 마찬가지로 이름 기반 가상 호스팅과 같은 작업을 수행합니다. 즉, Host
들어오는 요청의 헤더를 검사하고 클라이언트가 액세스하려는 호스트 이름을 기반으로 다양한 콘텐츠를 제공할 수 있습니다. 자세한 출력을 보면 curl
다음 헤더가 포함되어 있습니다.
> Host: localhost:6050
...하지만 서버가 "localhost"를 제공해야 하는 도메인 이름으로 인식하지 못하므로 문제가 발생할 것이라고 확신합니다.
해결 방법 1: curl
일반 URL("spaa.acm.org" 도메인 포함)을 얻을 수 있지만 localhost:6050을 통해 연결을 프록시합니다.
curl -v -x localhost:6050 http://spaa.acm.org/2020/SPAA2020TutorialProgram.pdf -O
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 6050 (#0)
> GET http://spaa.acm.org/2020/SPAA2020TutorialProgram.pdf HTTP/1.1
> Host: spaa.acm.org
> User-Agent: curl/7.54.0
> Accept: */*
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 OK
< Connection: Keep-Alive
< Content-Type: application/pdf
< Last-Modified: Sat, 11 Jul 2020 07:33:05 GMT
< Etag: "168eb-5f096b31-3718a48ea4a1f404;;;"
< Accept-Ranges: bytes
< Content-Length: 92395
< Date: Sun, 15 Nov 2020 01:24:27 GMT
< Server: LiteSpeed
<
( Host: spaa.acm.org
제목을 참고하세요.)
해결 방법 2: Host
헤더를 명시적으로 재정의합니다.
curl -v -H "Host: spaa.acm.org" http://localhost:6050/2020/SPAA2020TutorialProgram.pdf -O
디버그 출력은 포함하지 않겠습니다. 작동한다고만 말하면 충분합니다.