2023.09.06

りばぷろってなに?

こんにちは、まだまだ暑い日が続きますね。
最近大量に発生しているというとても大きくて羽の生えた虫にビビりまくっているりです。

今日は業務でよくわからんな???となりまくったリバースプロキシについて調べたり教えてもらったことをまとめようと思います。
自分のためだけにまとめたのでわかりづらいかもしれませんが、何かの役に立てば幸いです。

制作系の人がまとめたものなのでふわっと読んでください。完全に信じるととてもあぶないです。
(社内の人は違うよ~のところがあったら教えてくださるとうれしいです)

そもそもプロキシってなんですか?

悪い人が悪いことをするときに使ってるあれですか・・・?と思っていましたが、そんなに犯罪臭がぷんぷんするものではありません。
大きめの会社さんとかでちょこちょこ見かける出口対策の一つです。こういうやつ。

左から順に地球マークがインターネット、真ん中のサーバのアイコンがプロキシサーバ、右端のPCのアイコンが社内PCです。

  1. 社内PCがインターネットを見に行こうとするときはプロキシサーバに「うんにゃらかんにゃら.comください」とリクエストを送ります。
  2. リクエストを受けたプロキシサーバはどこぞにあるうんにゃらかんにゃら.comのwebサーバにリクエストを送ります。
  3. リクエストを受けたうんにゃらかんにゃら.comのwebサーバはプロキシサーバにコンテンツを返します。
  4. コンテンツをもらったプロキシサーバは社内PCにコンテンツを返します。

この一連の流れが「プロキシサーバを使う」ということらしいです。

プロキシサーバを使うメリット・デメリット

メリット

匿名性を確保できる

インターネットに直接接続するのはプロキシサーバなので、社内PCのIPアドレスなどなどの情報が特定されにくくなります。

いつ、だれが、どんなサイトを見たのかがわかる

社内のPCでうさんくさいサイトにアクセスしていないか、もししていたらいつだれが見たのか、がわかるようになります。

フィルタリングできる

そもそもインターネットにアクセスできるPCを絞ったりユーザ認証をつけたり、はたまたアクセスできるURLを絞ったりできます。
ビットスターでも一部の人はユーザ認証が必要なネットワークにつないでお仕事をしたりしています。(たぶん)

キャッシュを作れる

業務上いいのか悪いのか微妙なところではありますが、キャッシュを作って次回アクセス時の表示を早くしたりできます。
一般企業さんだと表示が早くなってよいのかもしれませんね。

デメリット

プロキシサーバがやられるととてもつらい

インターネットとのやり取りをすべてプロキシサーバを介して行っているので、プロキシサーバの脆弱性を狙って攻撃されるととてもつらいことになります。
じゃあプロキシサーバ自体の対策はどうやってするの?となりますが、ここはきっとインフラつよつよの方が書いたものを読んだほうがよいと思いますのでここでは触れません。(逃げています)

ふわ~っとしていますが、これが今自分が理解しているプロキシサーバの概要です。
次はリバースプロキシについて調べてみました。

リバースプロキシってなに?

リバースプロキシはプロキシの逆です。
プロキシがインターネットへの出口を管理するサーバと称すなら、リバースプロキシはインターネットからのアクセスを管理するサーバです。

左端がインターネット、真ん中がプロキシサーバ、右端がwebサーバだと思ってください。

  1. インターネットから「うんにゃらかんにゃら.comをください」というリクエストがプロキシサーバに送られてきます
  2. うんにゃらかんにゃら.comのコンテンツは右端一番上のwebサーバに入っています。リバースプロキシは右端一番上のwebサーバに「コンテンツをください」とリクエストを送ります。
  3. 右端一番上のサーバはリバースプロキシにリクエストされたコンテンツを返します。
  4. リバースプロキシは受け取ったコンテンツをインターネットに返します。

この流れが「リバースプロキシを使う」ということらしいです。

リバースプロキシを使うとどんなことができるの?

1ドメインで複数のwebサーバを運用できる

静的コンテンツと管理システムを分けたりすることができます。MovableTypeを使う人だったらサーバ配信をするためのやつ、と思っていただくと理解が早いかもしれません。

静的コンテンツと管理システムを分けると、もし静的コンテンツが格納されているwebサーバが攻撃を受けても管理システムは無事=大事な情報を守れる、ということになります。つよいですね。

負荷の分散

たくさんのアクセスがあるサイトだと、アクセスが集中しすぎると落ちたり遅くなったりします。
同じコンテンツを置いているサーバがリバースプロキシの後ろにあればアクセスを振り分けて負荷を分散させることができるらしいです。
ロードバランサとの違いはこのあたりを見ていただくときっとわかりそう…。
リバースプロキシとロードバランサーの違いとは? – NGINX

そのほか、認証サーバと連携させてシングルサインオンを作ったりするときや、他にもいろいろな使い方があるようです。

リバースプロキシを使った実際にあった案件

ここからは業務でなかなか理解できなかったことを振り返って、どういうことだったのか書いていこうと思います。
リバースプロキシだけでは解決指定なので、もしかしたら特殊な例かもしれません……?

実際に考えて作業してくださったのは弊社のIKSH(インフラとか開発のすごい人)たちです。いつもありがとうございます!!!!今回もありがとうございました!!!!!!!!!

どんな案件?

すごく大きいwebサイトのリニューアルを行います。

  • 1度に実施するには大きすぎるため、今回は小分けにした一部のリニューアルを行います。
  • すべてのサイトをリニューアルするまではリニューアル後のコンテンツが入った新webサーバと、リニューアル前のコンテンツが入った旧webサーバの2つを使います。
  • リニューアルがすべて終わると、旧サーバは消して新サーバだけで運用します。
  • 新サーバにはサブドメインが振られています。旧サーバにはブラウザのurlバーに表示させたいドメインが振られています。

やりたいこと

  • 1つのドメインで2つ(新・旧)のサーバにあるコンテンツを見せたい
  • もし片方のwebサーバ上に無い画像やcssなどがあったらもう片方のwebサーバを見てほしい

どうしたら解決できるの?

考え方

前述のリバースプロキシってなに?で書いたような、純粋なリバースプロキシの使い方だと実現は難しいそうです。(・2つ目の画像のところとか)

ので、旧サーバにリバースプロキシとwebサーバの役割を持たせ、さらに新サーバもインターネットからアクセスできるようにしていただきました。
最終的には新サーバにすべて移転するので、インターネットからアクセス可能な状態なのは問題ないといえば問題ないよね、というやつです。

新旧どちらのサーバもインターネットからアクセスできる状態になっていれば、画像とかのurlが曖昧なものはリダイレクトで、そのほかのurlが決まっているものはリバースプロキシでなんとかできるかも??

アクセスしてくるユーザは基本的に旧サーバに振られているドメインをたたくので、一番初めにアクセスが来るのは旧サーバです。

1.リダイレクトの設定

  1. 旧サーバに「Aという画像をください」というリクエストが来る(①)
  2. 旧サーバは自分の中にAという画像があるかチェックする(②)
  3. 画像が無かったら新サーバにリダイレクト(③-a→④-a→⑤-a)
  4. 画像があったらリバースプロキシの設定に従う(③→④-b→⑤-aもしくは③→④-c→⑤)
    ※ここはリダイレクト関係ない

2.リバースプロキシの設定

  1. 旧サーバに「/うんにゃら/かんにゃら/index.htmlをください」というリクエストが来る
  2. 旧サーバは自分のproxy.confなどに記載されている設定を確認する
  3. /うんにゃら/かんにゃら/ が新サーバを見に行く設定になっていたら新サーバのコンテンツを、特に何も設定されていなかったら旧サーバのコンテンツを返す
    ※1.リダイレクトの設定 4の画像も同じ動きをする

実際にどんなコードを書いていただいたかはよくわかっていませんが、ざっくりこのように解決していただきました。
やった~~~~~!!!!!!!!!!!

まとめ

わかったような気になっていますが、実際全然わかっていないのかもしれません。
が、普段ふわっとしか依頼できていなかった「リバースプロキシ」とはどんなことなのか、依頼内容によってはリバースプロキシでは実現不可能なものもある、ということがふんわりわかった気がするので、今までよりも慎重に事を運べるようになるかもしれないな、と思いました。

デザイン系のチームに所属している自分から見るとインフラや開発のことはどうしても難しく見えるし実際その通りなのですが、何も知らないわからない全部任せます、だとチームで働けないですよね。

どんな言葉でどう話を組み立てたらお互いにスムーズに会話できるのかとか、今は案件のスケジュール的にここだから前後の工程の人とどんなことを話すべきなのかとか、そういうことをたくさん考えられるようになりたいなと思いました。

あとは今日使っている画像は私の手書きなので、もう少し字も絵も上手になりたいです。

一覧に戻る