localhostとアプリケーションサーバとWebサーバと

久しぶりにRailsアプリを開こうとしてlocalhost:3000叩いたら、接続できませんと言われた。結局別のアプリで立ち上げてた、ポート番号8080のサーバをダウンさせた後にRailsのポート番号3000のサーバを計2度立ち上げたら、正常にアプリを開くことができた。

 

ローカルでサーバは普通に複数立てれるっぽいので、この解決法が何か今後の参考となるかはかなり微妙だけれど、解決するまでの過程でlocalhost、Webサーバ、アプリケーションサーバあたりの話を少し調べたので、備忘録として記録する。

 

localhostとは

localhostは自分自身(のPC)を表すホスト名のこと。IPで表すと127.0.0.1で、このIPは自分しかアクセスしないのでプライベートアドレス。

 

ブラウザのアドレスバーにlocalhost:XXXと打ち込むと、自PC内で立ち上げているアプリケーションサーバにアクセスすることができるよう。XXXはポート番号で、Railsアプリではよく3000番を使用するらしい。

ちなみにポート番号は、通信においてアプリケーション層に非カプセル化を行う際、どのアプリケーションに向けて通信を送ればよいかを識別するために用いられるもの。普通であればHTTPは80番、HTTPSは443番だけど、コード側でそこは変えることができる。

 

アプリケーションサーバとWebサーバ

Rails開発においてWebサーバとアプリケーションサーバというのは異なるものであるらしく・・・

 

Webサーバは「ユーザーから送られてきた自サイトへのリクエストを受け取り、なんらかの処理を加えるプログラムであり、場合によってはRailsアプリケーションにリクエストを投げる」もので、アプリケーションサーバは「Railsアプリケーションを動かしている」ものらしい。

 

開発環境ではWebサーバを使うことは少ないが、本番環境ではWebサーバを立てるのが一般的らしいので、今自分がPC内で立ち上げているRails用のサーバはおそらくアプリケーションサーバだと思う。

ただサーバ立ち上げのために使っているPumaというソフト、調べていると「Webサーバ」と説明されているページと「アプリケーションサーバ」と説明されているページに分かれており、ちょっとこの辺はよく分からない。アプリケーションサーバにWebサーバの機能を組み込める、みたいな話も調べる中で見たので、もしかするとそういう構成になっているのかもしれない。

 

Railsアプリにおける通信の遷移

ブラウザ

→Webサーバ(Nginxなど)

アプリケーションサーバ(Pumaなど)

→Rack

→アプリケーション(自分で書いたコード)にHTTPリクエストが届き、処理される

→行きと逆の順でブラウザまでHTTPレスポンスを届ける・・・

 

本番環境ではおそらく主にこういう通信になっていて、開発環境はここからWebサーバを引いた形になるのかなと。

 

まとめていないまとめ

Rackはボリュームある内容っぽかったので調べるのはまた今度に。

 

参考

127.0.0.1とlocalhostと0.0.0.0の違い - Qiita

Rails開発におけるwebサーバーとアプリケーションサーバーの違い(翻訳) - Qiita

PHP - localhost:8080の8080に意味はあるのでしょうか?|teratail