彼らは、Apacheのmod_rewriteはURL操作のスイス軍ナイフだと言いますが、これを行うことはできますか?特定のポート/サーバで待機しているアプリケーションにApache URIを書き直し/プロキシする方法はありますか?
私は、アプリケーションの唯一の設定可能なオプションがポート番号である私のApache Webサーバーに新しいアプリケーションを追加したいとします。
&は、 "http://hostname.example.com:8080"ではなく "http://hostname.example.com/app"という形式のURLを使用します。これは、クライアントが機関のファイアウォールを通過することを確実にし、一般的にはより巧妙です。
私のアプリケーションには、絶対URIがphp、javascript、およびcssで含まれているため、アプリケーションの内部リンクのURIに自分のルート位置を追加します。私はDNSレコードにアクセスすることができないので、別の名前ベースの仮想サーバーを作成することはできません。
Apacheのmod_rewriteモジュールとmod_proxyモジュールを使用して、クライアントをアプリケーションの適切なホームページに透過的にリダイレクトすることができます。しかし、そのホームページ内のリンクは、新しいベースURLに関連したリンクをクライアントに指示しません。
したがって、特定のポートでリッスンしているアプリケーションに要求をプロキシするにはどうすればよいですか?
私はポート8080でリッスンするアプリケーションを持っていた場合、私は私のApacheの設定でこれを入れることができますが: -
<VirtualHost *:80>
SSLProxyEngine On
ServerName myhost.example.com
RewriteEngine On
UseCanonicalName On
ProxyVia On
<Location "/application">
RewriteRule ^/application/?(.*) http://localhost:8080/$1 [P,L]
</Location>
</VirtualHost>
アプリケーションは絶対URLを使用しなかった場合、これは正常に動作しますが、それそうです。私がする必要があるのは、アプリケーションのcss、javascript、およびphpによって返されたURLを書き換えることです。
私はProxyPassとReverseProxyPassのドキュメントを見てきましたが、これらはうまくいくとは思われません。
また、Nick Kewのmod_proxy_htmlも出てきましたが、これは標準のApache Distributionには含まれていません。私の機関のWebサーバーは何年も経っていないようです。手動でトラブリングしたり-r | sed type expression)をアプリケーションのソースコードを通じて使用するか、このサードパーティ製のアドオンを使用して、これについて他の方法がありますか?
おそらくmod_rewriteルールに内部サーバー変数の一部を使用できますか?たとえば、 'HTTP_REFERER'に基づく書き換えルールですか?
ウェブページの内部リンクが '/'で始まる場合、ウェブページの内部リンクが '/'で始まる場合、mod_proxy-htmlが必要です(例えば '/ img/abc'要求があいまいであるためコンテキストなし: 'application/img/abc'または実際には'/img/abc')。相対リンクのみを使用するようにアプリを修正できませんか? – eudoxos
私はこれに答えました:... S 問題のアプリはディレクトリベースではなく(それぞれのポートでリッスンするデーモンアプリケーション)、それぞれのルートディレクトリ以外のものは参照しません。 1つのアプリケーション(経路ツール)で絶対URIのすべてを修正しようとしましたが、これでアプリが殺されました。これはたくさんの作業であり、アップデートが何か重要なものを置き換えた場合には、繰り返す必要があります(そのうちのいくつかはバイナリとして配布することができないため編集不可能です;このアプリが壊れた理由は間違いありません)。 太郎:) –