2016-10-05 14 views
0

これらをリダイレクトしようとしています。これらサブドメインへのHAProxyリダイレクト

http://blog.example.co.uk/xyz?a=b

https://blog.example.co.uk/xyz?a=b

しかし、ドキュメントと、これを行うための最善の方法で苦労する

http://www.example.co.uk/blog/xyz?a=b

https://www.example.co.uk/blog/xyz?a=b

*更新*

これは私が現時点で働いてしまったものであり、私が合格した場合、

http://www.example.co.uk/blog?a=b

これは

http://blog.example.co.uk?a=b

にリダイレクト...そして彼はコンフィグの断面図です。

acl blog_page path_beg -i /blog

use_backend blog_site if blog_page

backend blog_sitereqrep ^([^\ :]*)\ \/?(.*)\/blog\/?(.*) \1\ /\2\3

redirect prefix http://blog.example.co.uk code 301

+0

自分の抱いていることを示すために私の質問を更新しましたが、新しい '' 'backend'''サーバを作るのではなく、単純なリダイレクトに減らすことができると考えました。 (fyi:サイトblog.example.co。英国は他の場所でホストされており、このhaproxyインスタンスを介して制御されていないので、リダイレクトを実行してからDNSが正しい解決を実行する必要があります) – user3490845

+0

ありがとうございます。実際に「前方」を意味するときに、「リダイレクト」という言葉を誤って使用することもありますが、間違いをしていないことがあります。はい、これはフロントエンドのセクションでHAProxy 1.6以降の1ライナーに減らすことができます。私は例を使って答えを提供します。 –

答えて

0

フロントエンドセクションに次の行は、この書き換えを行うとリダイレクトします。明確にするために複数の行として表示

これはすべての設定の一行に表示されている必要があります。

http-request redirect 
     code 301 
     location https://blog.example.com%[capture.req.uri,regsub(^/blog,)] 
     if { hdr(host) -i www.example.com } { path_beg /blog } 

ホストヘッダーがwww.example.comと一致し、パスがブログで始まる場合、にリダイレクトリテラル文字列https://blog.example.comで始まる場所は、要求URI(パス+クエリ文字列)を取得し、正規表現置換を使用して派生した値を連結して、先頭から/blogを削除します。

確認:

$ curl -v 'http://www.example.com/blog/posts?which=this&that=1' 
* Hostname was NOT found in DNS cache 
* Trying 127.0.0.1... 
* Connected to www.example.com (127.0.0.1) port 80 (#0) 
> GET /blog/posts?which=this&that=1 HTTP/1.1 
> User-Agent: curl/7.35.0 
> Host: www.example.com 
> Accept: */* 
> 
< HTTP/1.1 301 Moved Permanently 
< Content-length: 0 
< Location: https://blog.example.com/posts?which=this&that=1 

リダイレクト位置が正確であるように見えます。

httpとhttpsを別々にリダイレクトする場合は、2つの行が必要です。それぞれの行では、元のリクエストがhttpまたはhttpsであったかどうかを判断するための条件が追加されます。

regsub()コンバータを使用するには、HAProxy 1.6+が必要です。

+0

コードをありがとう、ちょうど私達がバージョン1.5.12を実行していることが分かった。あなたが言うように、 '' 'regsub()' ''は失敗します – user3490845

+0

また、今、私は元のURLを保持する必要がありますので、これは可能ですか? – user3490845

+0

その場合、ブログサーバーをバックエンドとして構成し、リダイレクトするのではなく、プロキシを介して要求を転送します。 –

関連する問題