ローカル環境でVagrant+nginxで気軽にリバースプロキシする2014-08-28ローカル環境でVagrant+nginxで気軽にリバースプロキシするVagrantサーバーサイドのアプリケーションがあって、静的コンテンツだけHTTPサーバーで配信したいっていうユースケースがあると思います。サーバー上で動かす場合にはだいたいこんな感じにHTTPサーバーでリバースプロキシしてアプリケーションと静的コンテンツを振り分けますよね。これをローカルの開発環境のときはどうする?っていう話です。ローカル環境のホストOSにはHTTPサーバーはたてたくないローカル環境で同じことするには、同じようにHTTPサーバーをたてればいいんですが、複数のプロジェクトをかけもちなんかしたりしてるとそれ用のvirtualhostを書いたり、hostsでホスト名を書いたりしてなんかダサい感じになってしまいます。あとは、複数人で開発なんかすると、Windowsの人もいれば、Macの人もいるし、各自色々なプロジェクトもってたりで、こっちでは動くけど、あっちでは動かないとか嫌な感じになります。そこで、VagrantでHTTPサーバーたてて振り分けられないかなと思って試してみました。この図の左側みたいに、XAMPPとかでホスト側にHTTPサーバーたてるんじゃなく、右側みたいにVagrantを使ってホスト側はきれいなままにしておきたいっていう気持ちです。仮想サーバーはVagrantの共有ファイル機能を使って、ホスト側の静的コンテンツをNginxに配信させるホスト側でサーバーアプリケーションを起動(この図の場合はJavaで9000番ポートで起動)Nginxは静的ファイル以外のリクエストならホストのJavaアプリケーションにリバースプロキシするこれで、ブラウザからは、http://localhost:8000/でアクセスすれば、ホスト側のサーバーアプリケーションにつながるし、静的コンテンツはそのまま配信されるという感じ。これをするなら、Javaのアプリケーションも仮想マシン上で動かしちゃえば?ってことになるんだろうけど、仮想マシンにあんまりメモリとか割り当てたくないし、ホスト側のCPUとかメモリを使いたいなって思ったのでこうしました。いうことで、実際に書いた設定ファイルの説明をしていきます。VagrantfileCentOS6.5でinitする。chef/centos-6.5Vagrantfileができるので、設定を書き換えます。ポートフォワーディングの設定と、静的コンテンツを共有フォルダとして、/var/www/html/におく。プロビジョニングはchef分からないのでシェルです。(chef勉強しないと。"provision.sh"endprovision.sh次に、プロビジョニングするshの内容です。nginxインストールして、ローカル環境だからとりあえず、ファイアウォール切る。/etc/nginx/conf.d/default.confという感じでこのVagrantfileが置いてある場所にconfを用意しといて上書きする。ここで、ちょっと一工夫があって、Vagrantで作った仮想サーバーのデフォルトゲートウェイは必ず、10.0.2.2になるようなので、リバースプロキシ先は、10.0.2.2としとく。あと、rootは、共有フォルダとしておいた/var/www/html/。以下省略これで、ホスト側のブラウザから、http://localhost:8000/ってアクセスすれば、ホスト側のJavaアプリケーションにつながって、静的ファイルが存在すれば、静的ファイルが配信されます。まとめこれで、ホスト側のhostsとか書き換えなくても気軽にリバースプロキシがたてられました!個人的にこのVagrant+nginx方式のいいところはもっとあって、全ての設定ファイルがソース管理にコミットできることです。Vagrantで余計なプラグインも入れてないから、Windowsだろうが、Macだろうが、OSのRubyのバージョンがなんであろうと、なんならOSにRubyが入ってなかろうがみんな同じように動くところがとてもいいと思ってます。#isucon同期3人組(チームじゃみお)でISUCON4参加しました。ツイートはてなブログをはじめよう!masato47744さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。