SSHリモート配信のため404が見つかりませんでした

SSHリモート配信のため404が見つかりませんでした

リモートサーバーからremote1.myorg.ioWebリソース(たとえば)にアクセスできません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

デバッグ出力は含めません。うまくいくと言えば十分です。

関連情報