2016-10-10 5 views
0

私はハプロキシに関する知識が非常に低いです。 haproxyのcontent.mydomain.com
URLの着陸 - - www.mydomain.com/getfiles/ハプロキシ - S3ホスティングサイトへのフォワードリクエスト

はそれがリルートWWWをリダイレクトすることは可能です

S3は、ウェブサイト(ルート53の別名)をホストされたコンフィギュレーションをテストしていました.mydomain.com/getfiles /からcontent.mydomain.com(s3のホストされたWebサイト)。

私は以下と同じサーバ上で実行されている別のアプリケーションにリダイレクトすることができましたがコンフィグ

acl display-s3-content path_beg /getfiles/ 
    use_backend my-content if display-s3-content 

backend my-content 
    reqrep ^([^\ ]*)\ (.*) \1\ /path/\2 
    server test www.mycomain.com:1936 

を述べたが、私はホストされたサイトをS3にそれをリダイレクトしようとすると、それは動作しません。以下は動作しない設定のバックエンドです

reqrep ^([^\ ]*)\ (.*) \1\ /path/\2 
    server test1 content.mydomain.com 

ありがとう!

+0

これは「リダイレクト」ではなく、「転送」です。 –

+0

したがって、 '/ getfiles /'で始まるパスが要求に含まれる場合、その要求をバケットに送信したいとします。私はそれがどのように行われたのかを示す答えを投稿することができますが、最初に、パスの先頭にある '/ getfiles /'を使って何をしたいのかを知る必要があるので、バケット内の正しいパスを探します。それを除く?それを別のものに置き換えますか?また、HAProxyのバージョンは? –

+0

ちょっとマイケル、私はそれに適切なアプローチを知ってうれしいでしょう、haproxy - 1.5.2と私はそれがコンテンツを表示するためにcontent.mydomain.comする必要があるので、私は現在s3が301を投げていると思うので、それを削除する必要がありますコンテンツ。ありがとう! –

答えて

3

あなたはコメントで述べたように、これは動作します:

reqirep ^Host: Host:\ content.mydomain.com 

アイデアはS3が期待値にHostヘッダを設定することです。

ややクリーナーアプローチはこれです:

http-request set-header Host content.mydomain.com 

それはヘッダ操作のための新しい/より良い/より安全なメカニズムを使用していますが、それは基本的に同じ目的を達成されたので、私は「より良い」と言う:リクエストヘッダを変更宛先サーバ(S3)が予期しているものに変更する。 http-requestのアプローチを使用すると、より安全で清潔になります。なぜなら、要求をどのように操作するかが「よりスマート」なので、req[i]repを使用してプロトコルを完全に破ることは、http-requestよりもはるかに簡単です。

元々、/getfiles/test.jpgについては、バケット内の/test.jpgにマッピングしていました。

http-request set-path %[path,regsub(^/getfiles,)] 

...しかしregsub(正規表現置換)コンバータが使用できないため、1.5であなたはreqirepを使用する必要があります:このリライトはHAProxy 1.6以降では非常に簡単であり、汚れてい

reqirep ^([^\ :]+)\ +/getfiles(.*) \1\ \2 

これは、要求からのGETHEAD、など)の行に一致し、余分な/getfilesをパスから削除します。除外パターンに:を含めると、他のヘッダーとのマッチングが妨げられます。同様のパターンを使用して、S3に要求を送信する前にプレフィックス(リリースバージョンなど)を追加することができます。

関連する問題