サブディレクトリを別のWebサーバで公開する

apache logo Apache

「サブディレクトリを別のWebサーバで公開する」

そげな方法があっとか探しっみっで!

仕事であったんでねー、現行のサイトがあって、それとは別にサブディレクトリで別サーバに作りたいと。

WebサーバはApacheではないかと推測して、本記事のカテゴリはApacheとした。

 

AWSならALBで実現可能

各サイトを別サーバで管理することは可能でしょうか?
~中略~

http://example.com/
http://example.com/jp/
http://example.com/au/

まさに今、私がやりたいことと同じ主旨のご質問。

 

ご回答が

 

AWSで構築するのであれば
ALB
を利用することでごく簡単にURLベースでサーバを分割することが可能です。
*ALBは最近使えるようになったL7ロードバランサーです。

~中略~

サブドメインで分けておくのが様々な可能性に対応出来て楽かと思います。

サブディレクトリで複数サイトを運用する際に、各サイトを別サーバで運用する方法
お世話になります。 タイトルの通り、下記のようにサブディレクトリで複数のサイトを運用する場合、 各サイトを別サーバで管理することは可能でしょうか? 可能であれば、どのようなインフラ構成で実現可能

 

サブドメインの方が楽ってのは絶対そうですよねー。

提案してみよ。

 

他のご回答を見ると、

運用の都合でサーバを分けたい場合は、サーバごとに別々のFQDNを持たせる。

 

ですよねー

サブディレクトリでわけて、リバースプロキシということもできますが

 

リバースプロキシを使うという案はいかがですか?

ふむふむ、やっぱり、LBかリバースプロキシを、ドメインを指定して接続して着弾した先に仕掛ける必要がありそうですな。

 

現行のサイトがAWSで運用されている場合、使える可能性があるけど、当然ながらAWSの知識が必要ですなー。

 

 

Apacheのmod_proxyで設定

現在のドメインを持ってるサーバでmod_proxyを有効にして設定する。

設定内容:

同一ドメインでサブディレクトリを別サーバに設置して表示させる為のapacheリバースプロキシ(mod_proxy)設定手順
同一ドメインだけれども、サブディレクトリだけを別サーバに設置したいので、apacheのリバースプロキシ(mod_proxy)設定手順を調べました。例 をサーバA(192.168.0.1) をサーバB(192.168.0.2)にしたい場合WE

ProxyPassReverseCookieDomain ってなんだ?

リバースプロキシサーバからの Set-Cookie ヘッダの Domain 文字列を 調整する

mod_proxy - Apache HTTP サーバ バージョン 2.4

Set-Cookie ってなんだ?

Set-Cookie は HTTP のレスポンスヘッダーで、サーバーからユーザーエージェントへクッキーを送信するために使用され、ユーザーエージェントはそれを後でサーバーに送り返すことができます。

Set-Cookie - HTTP | MDN
Set-Cookie は HTTP のレスポンスヘッダーで、サーバーからユーザーエージェントへクッキーを送信するために使用され、ユーザーエージェントはそれを後でサーバーに送り返すことができます。

 

Cookieのために必要なんやな。おまじないとして覚えておくのが幸せやな。

 

Yahoo知恵袋にも似た手法がございますな。(上記の方のは他の手法も載せておられます)

リバースプロキシを使えばできます。
普通 htaccess というより、
httpd.conf
に設定します。
まず、apache の mod_proxy モジュールをロードするようにして、
LoadModule proxy_module modules/mod_proxy.so
あるロケーションで他のサーバーを参照する様に設定します。
<Location “/aaa”>
ProxyPass http://192.168.0.1
ProxyPassReverse http://192.168.0.1
ProxyPassReverseCookieDomain 192.168.0.1 hoge.com
ProxyPassReverseCookiePath / /aaa/
</Location>
なんて感じにすると、
内部ネットワークの
192.168.0.1 のサーバーBを
hoge.com/aaa/
から見える様にできます。

同一ドメインで、特定のサブディレクトリのみ別サーバーで運用するにはどうしたらよいでしょうか。(同一ドメインを複数サーバーで運用)ht... - Yahoo!知恵袋
同一ドメインで、特定のサブディレクトリのみ別サーバーで運用するにはどうしたらよいでしょうか。(同一ドメインを複数サーバーで運用)htaccessの記述方法、DNS設定方法を教えてください。 hoge.com/というドメインをAサーバーで公開しています。hoge.com/aaa/こちらのサブディレクトリのみBサーバーで公...

 

Apache公式マニュアル

 

ProxyPass /mirror/foo/ http://backend.example.com/
ProxyPassReverse /mirror/foo/ http://backend.example.com/
ProxyPassReverseCookieDomain backend.example.com public.example.com
ProxyPassReverseCookiePath / /mirror/foo/
mod_proxy - Apache HTTP サーバ バージョン 2.4

こちらはLocationは使ってないですが、同じ動きになりますね。

 

<Location> セクションの中で使われた場合は、 最初の引数は省略され、ローカルディレクトリは <Location> から取得されます。

とのこと。

kinstaさんによるリバースプロキシの詳細な説明

リバースプロキシの設定方法(NginxとApacheでの設定手順)
WordPressのための包括的なリバースプロキシに関する記事です。リバースプロキシを介して、サブディレクトリから別のWordPressサイトをロードする方法をご紹介します。
  • フォワードプロキシ・・・主にユーザーサイドで使用される。(ユーザーのIPを秘匿できる)
  • リバースプロキシ・・・主にサーバーサイドで使用される。(LB的な使い方ができる)’

一般的なリバースプロキシは、主に負荷分散(ロードバランシング)の目的で使用されるため、「ロードバランサー」とも呼ばれます。

たしかにほぼLBだもんなー。

 

広域負荷分散(Global Server Load Balancing、GSLB)は、世界中に戦略的に配置した多くのサーバーにウェブサイトのトラフィックを分散する、高度な負荷分散手法です

リバースプロキシで、サブディレクトリを外部のサイト(LANの外)にあるWEBサーバにしていできるのか?という疑問がありましたが、できるみたいですね。

「高度な」というのが非常に気になりますが。

CloudFlareなどのCDNが使ってる手法みたいですね。

mod_proxyでできるのか?

→あとで検証しよう

 →できました。この記事の下の方に結果を書きました。

 

リバースプロキシは、メインのサーバーに到達する前にすべてのトラフィックを受信するため、攻撃者やハッカーが、ウェブサイトにDDoS攻撃などのセキュリティ的な脅威を与えることが難しくなります。

あっ、そうなんだ。でもリバースプロキシが死ぬとかはないのかなー。

あー、Kinstaさんの提供しているリバースプロキシが超強力だからってことかな。

個人のサイトは弱いけどリバースプロキシが強いからDDoS食らっても耐えられると。

 

最も使用されてそうなリバースプロキシ

 

先述のKinstaさんの記事によると、

CDNがもっとも利用されてそう。(CDNとリバースプロキシは別だとの記述もされてますが→「CDNはリバースプロキシの発展型であり…」)

自分らで構築するならnginxが最もりようされてそう、な感じですな。

 

Apacheは、

Apache HTTP Server 以外にも

Apache Traffic Server

というのもあるんですね。知らんかった。

 

 

リバースプロキシ使用上の留意点

 

  • リバースプロキシは、通過するすべてのトラフィックを読み取って変更できるため、重大なセキュリティリスクとなります。HTTPSトラフィックをリバースプロキシ経由で渡す場合、リバースプロキシはデータの復号化と再暗号化を行います。すなわち、リバースプロキシはSSL/TLS証明書の秘密鍵を所有する必要があります。そのため、悪意のある第三者がリバースプロキシに侵入した場合、パスワードのログへの保存や、ウェブサイトへのマルウェアの注入が可能です。

リバースプロキシの段階でhttps化が必要だと。そらそうですよね。

そこの段階で暗号化しないと。

 

Apacheのmod_proxyを使って検証してみた

環境は、

Webサーバ2台使う。

1台目は、root権があるApacheが入ったサーバ

2台目は、XSERVER

 

1. dnf install httpd

 

インストール直後、確認したところ、最初からmod_proxyは有効になっていた

 

2. 1台目サーバのhttpd.confに設定

<Location "/bbb">
ProxyPass https://exmple.com/
ProxyPassReverse https://exmple.com/
ProxyPassReverseCookieDomain https://exmple.com/ test.com
ProxyPassReverseCookiePath / /bbb/
</Location>

 

上記設定して

httpd -k start

apache起動。

 

エラー出た。

ブラウザでアクセスすると、Internal Server Error。

apacheのerror_logを見ると、以下の出力がされてる。

AH01144: No protocol handler was valid for the URL /bbb (scheme 'https'). If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

http サーバへリバースプロキシする場合と比べて SSLProxyEngine を追加する必要がある

Apache 2.4 から https サーバへリバースプロキシする - Qiita
概要 Apache HTTP Server 2.4 から https サーバへリバースプロキシする リバースプロキシの設定には ProxyPass と ProxyPassReverse を使用する http サーバへリバースプ...

てことらしい。

httpsで指定したからか。とりあえずhttpで指定し直してみる。

<Location "/bbb">
ProxyPass http://exmple.com/
ProxyPassReverse http://exmple.com/
ProxyPassReverseCookieDomain http://exmple.com/ test.com
ProxyPassReverseCookiePath / /bbb/
</Location>

ブラウザでアクセス。

http://test.com/bbb

あれ、Webブラウザのアドレスバーに表示されているURLが、遷移先のドメイン(example.com)に変わってしまった。

 

example.com 側で、URL正規化(httpsに強制的にリダイレクト)させてたことが原因だった!

考えてみれば当たり前だけど、サブディレクトリ(の先)に当たる側のWebサーバでリダイレクト処理とかしちゃいかんね。

 

 

 

 

 

 

コメント

タイトルとURLをコピーしました