読者です 読者をやめる 読者になる 読者になる

@テク野路ジーロード

配信タグシェアリングシステムpickvyを開発、運営開始。最近は、Googleアナリティクスを研究中

Railsに外部からアクセスできなかった話し

 

ーーー
2016/5/6追記

記事の一番下に「デフォルトでrails serverを--bind=0.0.0.0付きで起動する方法」
に関して、別記事へのリンクを張りました。良かったらどうぞ。
ーーー

 

Railsを始めて、日が浅い中、開発したアプリケーションを別サーバに移して、
アクセスする実験をやってみた。

 

そもそも、「別サーバに移す」とはどういうことか?

すごい大雑把に言うと以下に実行すること

  1. Railsアプリケーションのフォルダを別サーバへコピーする
  2. DB(今回だと、MySQL)を別サーバーへコピーする by mysqldumpで。

 

もちろん、上記以外にも「システム環境を整備する」も別途必要

 

上記を完了させて、「rails server」コマンドを実行!
localhostではアクセスできることを確認!
しかし、外部からアクセスできない!! まとめると以下だ。

  1. http://localhost:3000/だと、「Rails Welcome abroad.」が表示される!
  2. http://(IPアドレス):3000/だと、上記のウェルカムメッセージが表示されない!

 

なーんでか?なーんでか?わからん。最初、ファイアウォールを疑って、firewalld関係をいじったが、ぜぇーんぜぇんわからんかった。

「まどろっこしい!早く、答えを書け!」という人もいるだろうから、結論書きます

 

外部公開用としてRailsアプリケーションを開始させるときは以下のコマンドを打て!

rails server -b 0.0.0.0

 

 

これに至るまでにやったこと=Wiresharkでネットワークキャプチャ!

アクセス先のURLをブラウザ上で叩いたときの動作を
wiresharkでネットワークキャプチャすると。
<結果>

  1. (アクセス元IP)     (アクセス先IP)    TCP    74    63642 > hbci [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=4843955 TSecr=0 WS=128
  2. (アクセス先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通信が正常開始された。

(参考)

  1. (アクセス元IP)     (アクセス先IP)     TCP    74    39544 > ftp [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=6912919 TSecr=0 WS=128
  2. (アクセス先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付きで起動する方法に関して、
知りたい人がいると思ったので、以下の追加記事を書きました。
参考になれば、うれしいです。

sunday150.hatenablog.com