web-dev-qa-db-ja.com

インターネットプロキシの背後にあるアプリケーションでリバースプロキシとしてhaproxyを使用する

社内でホストされている共通のURLの下で、オンプレミスとオフサイトのいくつかのWebアプリケーションを統合する必要があります。オンプレミスアプリケーションはhaproxyと同じデータセンターにありますが、haproxyが実行されているサーバーには直接インターネットアクセスがないため、オフサイトアプリケーションにはhttpプロキシ経由でのみアクセスできます。したがって、httpインターネットプロキシを使用する必要があります。SOCKSもオプションになる可能性があります。

バックエンドにはプロキシ経由でのみ到達できることをhaproxyに伝えるにはどうすればよいですか?私はむしろnot socksify/proxifier/proxychains/tsocks/...のような追加のコンポーネントを使用します。これは追加のオーバーヘッドを導入するためです。

この図は、セットアップに関連するコンポーネントを示しています。 haproxy setup with proxy

これをマシンで実行するとインターネットに直接接続この構成を使用でき、問題なく動作します。

frontend  main
    bind *:8000
    acl is_extweb1 path_beg -i /policies
    acl is_extweb2 path_beg -i /produkte

    use_backend externalweb1 if is_extweb1
    use_backend externalweb2 if is_extweb2

backend externalweb1
    server static www.google.com:80 check

backend externalweb2
    server static www.gmx.net:80 check

(明らかに、これらは私が話しているURLではありません。これは単なる例です)

Haproxyは、外部アプリケーションをチェックして、トラフィックをそれらにルーティングすることができます。

HAproxy stats page

私が働いている会社の安全な環境では、プロキシを使用する必要があり、haproxyは外部アプリケーションに接続できません。共通のhttpページ/ブラウザを介してアクセスを提供しながら、haproxyがhttpプロキシの背後にある外部Webアプリケーションサーバーを使用できるようにするにはどうすればよいですか(認証は不要)。

10
Marged

私はそれを機能させることに興味をそそられましたが、haproxyのドキュメントには何も見つからなかったので、少しグーグルで検索したところ、nginxうまくいくかもしれませんが、私にとってはうまくいきませんでした。もう少しグーグルした後、Apache動作します。

ここに重要な部分があります:

Listen 80

SSLProxyEngine on

ProxyPass /example/ https://www.example.com/
ProxyPassReverse /example/ https://www.example.com/
ProxyRemote https://www.example.com/ http://corporateproxy:port

ProxyPass /google/ https://www.google.com/
ProxyPassReverse /google/ https://www.google.com/
ProxyRemote https://www.google.com/ http://corporateproxy:port

この構成をnginx、さらにはhaproxyに変換する方法があるはずだと確信しています...時間を見つけることができれば、答えを自分の発見で更新します。

apacheが機能するためには、いくつかのモジュールも有効にする必要があります。githubリポジトリを、基本的なDocker構成で紹介します。完全に機能する構成を確認するには、それを自由に見てください。

3
davide bubz

アイデアとして、これにデリゲート( http://delegate.org/documents/ )を使用するのはどうですか。

haproxy -> delegate -f -vv -P127.0.0.1:8081 PROXY=<your-proxy>

http://delegate.org/delegate/Manual.shtml?PROXY

私はそれがそれほどエレガントではないことを知っていますが、それはうまくいくかもしれません。

私はこのセットアップを地元のイカとこのカールコールでテストしました

echo 'GET http://www.php.net/' |curl -v telnet://127.0.0.1:8081

Curl呼び出しは、haproxytcp呼び出しをシミュレートします。

4
Aleksandar