サーバーの内部だけで公開しているサービスへの、ポートを用いた転送と、サブドメインを用いた転送方法


2016年9月9日


こんにちは。最近PokemonGOばっかりやってる、はちです。
ずかんがやっと105種類埋まりました。まだまだ遠いですが全部集めるまでは頑張ります。
別に今日が8月8日だから投稿したわけではありません。

今回はPokemonGOの調べ物をしていた時に、ふと見た質問から。
◆動作環境
OS:Ubuntu 14.04LTS

特定ポートへのアクセスをローカルアドレスに転送したい

例えば、www.alt-plus.jp:9999へのアクセスを、サーバー上のみ公開している127.0.0.1:3000へ転送する方法です。

基本的にローカル環境のみで動くパッケージを外部に公開するときには、
iptablesのポート転送を使うことで擬似的に公開することが出来ます。


PREROUTING は入ってきたパケットを変換するルールです。
ちなみにですが、–to-destinationではなく、REDIRECTでも多分大丈夫です。

ポートへのアクセスの転送は比較的簡単です。
ただUFWなんかを使っていてiptablesの細かい設定をしていないと、
設定が干渉しあったりする部分がある(優先の問題など)ので注意してください。私はこれでハマりました。

サブドメインへのアクセスをローカルアドレスに転送したい

ポート番号を開示するのは怖いので、サブドメイン「sub.alt-plu.jp」を切って
サブドメインへのアクセスが有った場合に、先ほどのローカルアドレスに転送する方法です。

これは1番手っ取り早いのは、Apacheやnginxのリバースプロキシを使うことです。

/etc/apache2/sites-available の中にサブドメイン設定用のファイルを作っておきます
(例:sub.alt-plus.jp.conf) これで、サブドメインへアクセスが有った時に、ポート3000番で内部公開しているサービスへ転送できます。
DocumentRootと、ProxyPassの部分はコメントアウトしていますが、
コメントアウトを外すことで、そのディレクトリへのアクセスは、リバースプロキシの転送を回避して直接アクセスできるようになります。

つまり、「sub.alt-plus.jp/nonproxy/」へアクセスした場合は、
ポート3000で内部公開しているサービスへは飛ばず、/var/www/sub.alt-plus.jp/nonproxy フォルダで公開しているページヘ飛びます。

こっちのほうがスマートで良いと思うんですが、DNSの設定やApacheの設定をしないといけないというのを考えると
テスト段階などはポート転送、サービスのカットオーバーなどはサブドメイン転送、など使い分けるのが良いかもしれませんね:)

おすすめ

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)
鶴長 鎮一
技術評論社
売り上げランキング: 90,143
いつぞやかの記事でも書いたのですが、Apahceに関する細かい設定や対策などは、この書籍を参考にしております。
これからApacheのことを勉強しようと思っている方も1度是非。