質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

2回答

3338閲覧

Apache リバースプロキシで絶対パス対応について

cupnew1988

総合スコア20

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

0クリップ

投稿2021/12/22 00:08

Apache2.4 でリバースプロキシについて質問です。

[Client] --> [proxy.example.com] ---> [xxxxx]
http://proxy.example.com/local/xxxxx/ -> http://xxxxx/

ローカルサーバxxxxxは複数台の不特定で、
中継サーバURLの /local/ がキーワード、
それ以降がローカルサーバーに渡すURLとなります。
今のところ、下記のような定義で問題なく中継できます。

(※投稿用のサンプルですが) ProxyPassMatch "/local/(.*)?/(.*)" "http://$1/$2" ProxyPassReverse "/local/(.*)?/(.*)" "http://$1/$2"

ローカルサーバ側でリンク先が相対パスの場合は問題ありませんが、
絶対パスの場合は 'local/xxxxx' が付加されず正しく置換されません。

<a href="page1.html">ページ1</a> http://proxy.example.com/local/xxxxx/page1.html <a href="/page1.html">ページ1</a> http://proxy.example.com/page1.html

mod_proxy_html で変換ルールを定義すればできるようですが、
対象となるローカルサーバーが不特定なため個別のルールを作るのが難しいところです。

正規表現など一律で絶対パスでも正しく変換できる設定方法はありませんか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ProxyHTMLURLMap を各サイト分、設定すればいいと思うのですが、それをまとめたいということですよね?

LocationMatch でプロキシ先ホスト名を環境変数に入れて、ProxyHTMLInterp On と ProxyHTMLURLMap の V フラグで環境変数を展開するといいと思います。
ただし、ProxyPassReverse は正規表現は使えないので、各サイト分、設定する必要があります。

ProxyHTMLEnable On ProxyHTMLInterp On ProxyHTMLLinks a href ProxyHTMLLinks (他、必要ならば) ProxyPassMatch /local/([^/]+)/(.*) http://$1/$2 <LocationMatch "^/local/(?<sitename>[^/]+)"> ProxyHTMLURLMap ^/ /local/${MATCH_SITENAME}/ RV </LocationMatch> ProxyPassReverse /local/foo.localdomain/ http://foo.localdomain/ ProxyPassReverse /local/bar.localdomain/ http://bar.localdomain/ (各サイト分)

投稿2021/12/23 02:27

TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cupnew1988

2021/12/27 03:13

返答が遅くなりました。 ある程度、対象となるサーバーが決まっている場合は 対象サーバ一覧を登録して "ProxyHTMLLinks"を追加すれば対応できそうですね。 現場ではProxy配下に置くローカルサーバの種類が統一されてなく置き換えも不規則なので、 その都度、新たなローカルサーバの挙動を調査してConfig設定を変えなくで済む方法はないか、 正規表現だけで中継することができれば、と思っていました。 当面は対象となるローカルサーバの動作を確認して対応してみます。
guest

0

HTML

1<a href="./page1.html">ページ1</a>

にすればどうですか?

投稿2021/12/22 08:49

skys215

総合スコア910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cupnew1988

2021/12/27 03:10

コードではなく、Apache設定の問い合わせです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問