サーバーからGET / POST HTTP要求をリダイレクトするソリューションを探しています。
最も簡単なのは、ポート変換とホスト名のリダイレクト(HTTP 3xxリダイレクト)です。 DMZ上のサーバーがポート7070でトラフィックを受信したとき(http://mydmz.server.com:7070)、これはトラフィックを公開Webサーバー(http://liveupdate.symantecliveupdate.comデフォルトポートは80)
ただし、要求ヘッダーを動的に変更する必要があります。
- /clu - 製品URIから削除する必要があります
- ホスト:mydmz.server.comと交換する必要がありますホスト:liveupdate.symantecliveupdate.com
ポート7070でリッスンし、次のことを行うために私のサーバーでどのツールとソリューションを使用できますか?ロードバランサー、HTTPプロキシ?
答え1
私はこれを達成するためにHAProxyを使用できると思います。
- ポート 7070/tcp でリッスンするには httpd モードに設定します。
haproxy 代替値を使用してホストヘッダーを変更します。あなたの場合は、次のように見えることがあります。
http-request replace-value Host mydmz.server.com:(.*) liveupdate.symantecliveupdate.com:\1
haproxy URL 書き換えを使用して URI を削除します。あなたの場合は、次のようになります。
reqrep ^([^\ ]*\ /)clu-prod[/]?(.*) \1\2
これらの設定では、HAProxyの構成は次のようになります。これはCentOS 7のHAProxyのデフォルト設定をすばやく変更したものです。いいえ徹底したテストを受けました):
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend main *:7070
default_backend app
backend app
http-request replace-value Host mydmz.server.com:(.*) liveupdate.symantecliveupdate.com:\2
reqrep ^(.*)/clu-prod(.*) \1/\2
balance roundrobin
server app1 liveupdate.symantecliveupdate.com:80 check
利用可能な他のオプションはイカプロキシです。http://www.squid-cache.org/