リモートサーバーからremote1.myorg.io
Webリソース(たとえば)にアクセスできません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サーバーは、多くのWebサーバーと同様に、名前ベースの仮想ホスティングなどのタスクを実行します。つまり、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
デバッグ出力は含めません。うまくいくと言えば十分です。