web-dev-qa-db-ja.com

Apache httpdを使用してコンテキストパスをリダイレクトしますか?

http://localhost:1006/http://example.com/public/として外の世界にプロキシしたいと思います。これが私の設定です:

RewriteEngine On
# Append a slash if necessary
RewriteRule ^/public$ public/ [R,L]

# Request headers: Replace http://localhost:1006/ with http://example.com/public/
ProxyPass /public/ http://localhost:1006/

# Response headers: Replace http://example.com/ with http://example.com/public/
ProxyPassReverse /public/ http://example.com/

ProxyPassReverseCookiePath / /public/
<Location /public>
    Require all granted
</Location>

これはヘッダーの書き換えには適していますが、サーバーはコンテキストパスが/ではなく/public/であると見なしているため、JSONに埋め込むためのURLを作成するときに正しくありません。 HttpdはJSONではなくヘッダーのみを書き換えるため、これについては何もしません。

HttpdでJSONを書き直したくありません(プロセスが信頼できないと読みました)。 httpdからサーバーに送信されるHostヘッダーに外部ホスト名が含まれていることに気付きました。これにより、サーバーはURLのその部分を修正できます。別のコンテキストパスを使用するようにサーバーに指示する、設定できる他のヘッダーはありますか?

意味、サーバーの構成/コードを直接変更せずにサーバーのコンテキストパスを変更するhttpdでできることはありますか?

3
Gili

簡単な答え:いいえ、そうではありません。通常、バックエンドアプリケーションには、適切なリンクを生成できるように、独自のルートURLを構成するためのオプションが必要です。バックエンドアプリケーションがTomcatなどでホストされている場合は、同じ相対パスで使用できるようにインストールします(たとえば、example.com/public/からlocalhost:1006/public/にプロキシします)。

2
larsks

出力を逆に書き換えることもできますが、書き換えを行うと、予見可能な将来に向けてコンテンツの書き換えでモグラを叩くので、バックエンドアプリに/ publicにあると思わせる方がはるかに簡単です。道。

0
Wyatt Barnett