3

私は 2 つの Apache Web サーバーを持っています。1 つはパブリック、もう 1 つはプライベートです。要件は、ユーザーがPUBLICドメインにアクセスし、 PRIVATEドメインからコンテンツを取得することです。PUBLICドメインは空で、ユーザー認証に使用される .htaccess ファイルのみが含まれている必要があります。すべてのリクエストは に来てhttp://public.com:60001/、Apache によって に書き換えられhttp://private:60001/ます。ユーザーはPRIVATEドメインに直接アクセスできませんが、PUBLICドメインがホストされているサーバーには接続があります。

これを実現するために、 PUBLICドメインの仮想ホストを更新して、これを含めました。

<Directory "/wwwroot/public.com">
    RewriteEngine on
    RewriteBase /
    RewriteRule ^(.*)$ http://private:60001/$1 [P]
    ProxyPassReverse http://private:60001/
</Directory>

これを行った後、ページは読み込まれますが、2 つの問題があります。

  1. Web サイトのページの html コード内のすべてのリンクはhttp://private:60001/、ユーザーがリンクをクリックすると 404 エラーが発生する形式になります (リンクがないため)。Apache がこれらのリンクを に書き換える方法はありますhttp://public.com:60001/か?
  2. Ajax 呼び出しが機能しない - 404 エラーが生成されます。おそらくポイント1と同じ問題が原因だと思います。

助けてくれてありがとう

4

1 に答える 1

1

Mod_proxy は問題を解決しません。privateからコンテンツのすべてのホスト名を削除する必要があります。したがって、次のようなリンクの代わりに:

<a href="http://private:60001/something/">

次のようにする必要があります。

<a href="/something/">

それ以外の場合は、 mod_proxy_htmlを調べることができます。これは、実際にページのコンテンツを (単なる要求ではなく) マングルし、コンテンツ内のリンクをプライベートにマップして、パブリックにリンクするようにします。いくつかの例については、このリンクを参照してください。

基本的に、次のようなものです。

ProxyHTMLLogVerbose On
ProxyHTMLLinks  a               href
ProxyHTMLLinks  link            href
ProxyHTMLLinks  form            action
ProxyHTMLLinks  script          src for
ProxyHTMLLinks  img             src longdesc usemap
ProxyHTMLLinks  iframe          src

ProxyHTMLEvents onclick ondblclick onmousedown onmouseup \
            onmouseover onmousemove onmouseout onkeypress \
            onkeydown onkeyup onfocus onblur onload \
            onunload onsubmit onreset onselect onchange

ProxyHTMLURLMap url\(http://private:60001([^\)]*)\) url(http://public:60001$1) Rihe
于 2013-08-29T21:56:25.200 に答える