Railsに外部からアクセスできなかった話し
ーーー
2016/5/6追記
記事の一番下に「デフォルトでrails serverを--bind=0.0.0.0付きで起動する方法」
に関して、別記事へのリンクを張りました。良かったらどうぞ。
ーーー
Railsを始めて、日が浅い中、開発したアプリケーションを別サーバに移して、
アクセスする実験をやってみた。
そもそも、「別サーバに移す」とはどういうことか?
すごい大雑把に言うと以下に実行すること
もちろん、上記以外にも「システム環境を整備する」も別途必要
- Ruby On Railsのインストール+bundle install(これが上手くいかなかったりもするので対処)
- MySQLのインストール
- ファイアウォールなどのアクセス制限の適正化
上記を完了させて、「rails server」コマンドを実行!
localhostではアクセスできることを確認!
しかし、外部からアクセスできない!! まとめると以下だ。
- http://localhost:3000/だと、「Rails Welcome abroad.」が表示される!
- http://(IPアドレス):3000/だと、上記のウェルカムメッセージが表示されない!
なーんでか?なーんでか?わからん。最初、ファイアウォールを疑って、firewalld関係をいじったが、ぜぇーんぜぇんわからんかった。
「まどろっこしい!早く、答えを書け!」という人もいるだろうから、結論書きます
外部公開用としてRailsアプリケーションを開始させるときは以下のコマンドを打て!
rails server -b 0.0.0.0
これに至るまでにやったこと=Wiresharkでネットワークキャプチャ!
アクセス先のURLをブラウザ上で叩いたときの動作を
wiresharkでネットワークキャプチャすると。
<結果>
- (アクセス元IP) (アクセス先IP) TCP 74 63642 > hbci [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=4843955 TSecr=0 WS=128
- (アクセス先IP) (アクセス元IP) TCP 60 hbci > 63642 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
1→2の繰り返し。hbciサービス用にTCPコネクションを試みてるけど、アクセス先から拒否されている。
これなんだ?hbciって何を意味してるんだ?
ちなみに、参考だが、ftpだと以下の感じ。1→2でTCPコネクションに成功したあと、
FTP通信が正常開始された。
(参考)
- (アクセス元IP) (アクセス先IP) TCP 74 39544 > ftp [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=6912919 TSecr=0 WS=128
- (アクセス先IP) (アクセス元IP) TCP 74 ftp > 39544 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1460 SACK_PERM=1 TSval=2140266 TSecr=6912919 WS=128
hbciってなんなの?ということでネットで探すと以下のページにいきあたった。
EC2上でrails4.2.1のWebrickを起動後、tcp port 3000番でアクセスできなかった時の対応 - production.log
これだ。。。これだよ。。。これなんっだよ!
早速、rails server -b 0.0.0.0を為すと。。。アクセス成功!ワンダフル!!
さらに調べると、以下も見つけた。
開いているファイルのプロセスを特定(lsofコマンド) - Qiita
lsofコマンド、便利だな。これ知らなかった。かなり使えるコマンドだぞ。
ちなみに、以下のような状態だった。
[NG]外部からアクセスできない状態のときは以下のような表示がされる
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 7067 (ユーザ名) 10u IPv4 72518 0t0 TCP localhost:hbci (LISTEN)
[OK]外部からアクセスできる状態になったときは以下のような表示がされる
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 4555 (ユーザ名) 9u IPv4 41272 0t0 TCP *:hbci (LISTEN)
これまで解決に時間がかかってた問題もこれさえあれば、短縮できそうだ。
Linuxエンジニアとしての研鑽が益々すすむ
ーーー
2016/5/6追記
恐らく、デフォルトでrails serverを--bind=0.0.0.0付きで起動する方法に関して、
知りたい人がいると思ったので、以下の追加記事を書きました。
参考になれば、うれしいです。