subtitle

RaiseTechの各種コースをはじめとしたイロイロな学習の記録

EC2にRails環境を構築する際に気になったところのまとめ

前の記事で、EC2にRails環境を構築したが、その時に色々気になったり調べたりしたことがいくつかあったので、覚書程度に残しておく。


セキュリティグループにHTTP(80番ポート)を0.0.0.0/0で設定しているのに、なぜRailsサーバーにアクセスするときに、「http://パブリックIPアドレス:80」ではだめなのか?

EC2でRailsサーバーを立ち上げて、ブラウザからアクセスするも、ポート指定なし(デフォルトはHTTPは80番ポート)では、アクセスできなかった。

インバウンドルールには、HTTPを追加しているはずなのになぜつながらん!けしからん!と思っていた。


自分が素人すぎて、よくわかっていなかったのだが(今もよくわかっていないww)、Railsサーバー(自分の場合はpuma)はデフォルトで3000番ポートが待ち受けているのだ。

だから、ポート番号を付けなかったり、ポート番号80とかでアクセスしても、そもそもRailsサーバーがドアを開けてくれていないから、アクセスできない。

と、言うわけで、Railsサーバーにアクセスするときは、デフォルトだと3000番ポートを指定してやって、更にはそのポートをセキュリティグループに設定して通過できるようにしておかねばならない。

けしからんのは自分の方だった。すみません。


ちなみに、この待ち受けポートは変更できる。

railsアプリの下に、config/puma.rbというファイルがあるが、ここでポートを変えることができる。

Railsサーバーの待ち受けポート番号を80にすれば、ポート指定しなくてもRailsサーバーにアクセスできることになる。


そうすると、また新たな疑問が沸き上がってくる。



EC2インスタンスに複数のアプリケーションがあった場合は、ポートが競合しないのだろうか?

するよね、競合。

1つのEC2インスタンスには、複数のRailsアプリ置けないじゃん?

と思ったら、ちゃんと回避策があるらしい。(そりゃそうだww)

なにやら、NginxというWebサーバーを使えばよいらしい。

WebリクエストをNginxが80番ポートで受け付けて、複数あるRailsアプリへ振り分けることができる、すごいヤツなんだそうな。

今は1個しかやらないから、必要ないけど、またどこかのタイミングで使う機会があるといいな。(こうやってPendingが増えていくのであるwつらみ)



Rails s の後につける「-b 0.0.0.0」はナニモノか?

おまじないのようにつけていた、-b 0.0.0.0。お前はナニモノなのだ。

まず、-b オプションは、RailsサーバーがネットワークでWebリクエストを待ち受けているときに、どのIPアドレスで待ち受けるかを指定する。

ちなみに、-b オプションがない状態(デフォルト)では、172.0.0.1。←自分自身

この場合は、自分のローカルPC上にRailsサーバーがあって、Webブラウザから「http://172.0.0.1」とアクセスした場合はつながるが、Railsサーバーがある自分のローカルPC以外のPCからアクセスしようとすると、他人のPCで打ち込んだ「http://172.0.0.1」は当然他人のPC自身にアクセスする事になるので、自PCのRailsサーバーにはアクセスできない。

逆に、Railsサーバー起動時に、IPアドレスを指定してやって、rails s -b 123.45.67.89 とすると、自分のPCからでも他人のPCからでもアクセスすることができるようになる。

なお、0.0.0.0はローカルマシンにおける、全てのIPv4アドレスを指すので、そのローカルPCの持つすべてのIPv4アドレスで待ち受けるという意味になる。 

だから、自分のローカルPC上にRailsがあって、Railsサーバーも自分のローカルPC上で起動させるなら、オプションなしの「Rails s」でいいけど、EC2上などのどこか別のところにあるRailsサーバーにアクセスしたい場合は、「Rails s -b 0.0.0.0」としておくことによって、どのPCからでもアクセスできるようになるということなのだ。

おまじないではなく、ちゃんと意味のある0.0.0.0だったということである。

お前誰?とか言って、どうもすみませんでした。