IISで実行される一連のWeb APIの前にバランサーとしてHAProxyを使用することを検討しています。
現在、ホストヘッダーを使用して、IIS上の適切なWebアプリケーションを正しく解決しています。たとえば、同じサーバー/ポートでotherapp.mycompany.comを実行している場合でも、ホストヘッダーIISを使用すると、どちらを提供するかがわかります。
リクエストにホストヘッダーを含めなかったため、HAProxyでの最初の試行で404エラーが残りました。IISは、指定されたIPにバインドされたデフォルトサイトにサービスを提供し、解決しませんでした。ホスト名。
修正により、次のようなものが残りました。
frontend localnodes
bind *:80
mode http
default_backend nodes
backend nodes
mode http
balance roundrobin
option forwardfor
reqirep ^Host: Host:\ node1.myapp.mycompany.com
server web01 node1.myapp.mycompany.com:80
これは単一のバックエンドに最適ですが、どのバックエンドがリクエストを処理しているかに応じて、正しいHostヘッダーを含める方法に頭を悩ませています。
backend nodes
mode http
balance roundrobin
option forwardfor
reqirep ^Host: Host:\ node1.myapp.mycompany.com
server web01 node1.myapp.mycompany.com:80
server web02 node2.myapp.mycompany.com:80
IIS(この場合のnode2は別のサーバー上にあり、したがって別のIP上にあるため、node2
が正しく解決されないため、上記を使用しても機能しません。実際、同じサーバー/ IPで実行されている場合、リクエストは「機能する」と思われますが、すべてHost1ヘッダーのnode1によって処理されます。
check
sもバックエンドに基づいて正しいHostヘッダーを提供する必要があることを意味します、それはどのように行われますか?編集:HA-Proxyバージョン1.7.9を使用しています。2017/08/18
もう少し背景を説明しましょう。以前はmyapp.mycompany.com
がAPIリクエストを処理するだけでした。それを拡大する必要があります。クライアントは引き続きmyapp.mycompany.com
を呼び出しますが、HAProxyをポイントするだけで、node1.myapp.mycompany.com
とnode2.myapp.mycompany.com
のバランスが取られます。現在のサーバー構成では、各サーバーに単一のIPアドレスをバインドしているため、Hostヘッダーを使用して解決します。
以下が機能するかどうかはわかりませんが、現在テストできませんが、おそらくこれはまだ役に立ちます。 (後でもう一度見ていきます):
解決策1:
backend nodes
mode http
balance roundrobin
option forwardfor
http-request set-header Host node1.myapp.mycompany.com if { srv_id 1 }
http-request set-header Host node2.myapp.mycompany.com if { srv_id 2 }
server web01 node1.myapp.mycompany.com:80
server web02 node2.myapp.mycompany.com:80
解決策2:
backend nodes
mode http
balance roundrobin
option forwardfor
http-send-name-header Host
server node1.myapp.mycompany.com node1.myapp.mycompany.com:80
server node1.myapp.mycompany.com node2.myapp.mycompany.com:80
補足したい gf _ 答え。したがって、彼の回答のアイデアは、値がソースホスト名自体であるカスタムHostヘッダーを追加することです。ソリューション1では、基本的に、彼は srv_id
事。
2番目の方法は、ホストの名前をHostヘッダーとして送信することにより、最初の解決策をショートカットします。
しかし、彼の解決策では、ヘッダーが設定されているだけであることに言及していません。ヘッダーがすでにある場合、既存のヘッダーを置き換えることはできないため、ケースを置き換える必要がある場合ホストヘッダー、あなたはこのような何かをすることができます
backend nodes
mode http
balance roundrobin
option forwardfor
http-request replace-header Host node1.myapp.mycompany.com node1.myapp.mycompany.com if { srv_id 1 }
http-request replace-header Host node2.myapp.mycompany.com node2.myapp.mycompany.com if { srv_id 2 }
server web01 node1.myapp.mycompany.com:80
server web02 node2.myapp.mycompany.com:80