VirtualBoxのCentOS7下でsinatraのアクセスができないとき
VirtualBoxにCentOS7とrubyを入れてsinatraでブラウザに「hello」と表示させようとしてもうまくいかず、また他の色々なサイトのやり方を試しても全然つながらなかったので、同じような方がいたときに参考になればと思います。
ちなみに解決策の情報源は職場の先輩です。
環境
- ローカルOS:Windows10
- リモートOS:CentOS7
- Ruby2.7.1
- フレームワーク:sinatra
- 仮想マシン:Oracle VM VirtualBox 6.1
- CentOS7はTeratermでssh接続をして使用
発生した問題
app.rbの立ち上げはうまくいっているのに、どれだけアクセス方法を変えても一向に「hello」の文字が表示されなかった。
SinatraでとりあえずWebアプリを立ち上げてみる
↑こちらの記事を参考にしていたのですが、「1.3 アプリケーションの作成と起動」のところで、ブラウザでhttp://localhost:4567
にアクセスしようとしたら・・・
このようにアクセスできませんと。
ここから色々なサイトを参考にさせていただき、試してみました。
解決まで(失敗も含む)
1. アクセス先を変更する
【参考記事】
外部接続だとSinatraはデフォルトの状態では繋がらない。あとlocalhostのあるあるミスも。
そもそもWindowsやMacなどのホスト側のlocalhostではなく、CentOSに対してアクセスしないといけなかったみたいです。
それもそうですよね、今動かしているのはVirtualBox内のCentOSなんですから。
この時に指定したのがホストオンリーアダプターのIPアドレスなんですが、その確認の仕方も書いておきます。
ホストオンリーアダプターの確認
ip addr
これを実行すると、
このような画面が出るはずです。
下の方に3: enp0s8
があって、そのinet
の次の「192.168.〇〇.〇〇」がホストオンリーアダプターのIPアドレスになります。
環境によって異なるらしいので適宜調べてください。
Teratermでssh接続するときもおそらくこのアドレスを使用していると思います。
なのでアクセスするのはhttp://localhost:4567
ではなく、http:192.168.〇〇.〇〇:4567
になります。(192.168.〇〇.〇〇は先ほど調べたホストオンリーアダプターのIPアドレスが入る)
結果的に言えばアクセス先はこれで合っているんですが、自分の場合は他の設定が足りておらずこの時はまだ正常にアクセスできませんでした。
2. 外部からもつながるようにする
【参考記事】
Sinatraがデフォルトでは外部から繋がらなくなってたよ
Sinatra ver1.4.0以降は、development環境だとlocalhostからのアクセスしか受け付けないようになっているらしいです。
この記事の一番下の「rubyのコードの中で設定する」と同じように記述しました。
set :environment, :production
で、これもまた結果的には正しい設定でした。
まだ、この後に記述する設定が残っていたので、この時点では先ほどと同じように正常なアクセスは出来ませんでした。
正常にアクセスできるようになった後で、試しにこの記述を外してアクセスしようとしたらアクセスできなかったのでやっぱり必要みたいです。
3. CentOS側の設定
こちらの設定についてはいくら探しても同じような記事が見つからず、結果的にすべて先輩からのアドバイスで解決しました。
順番にどうしていったかを説明します。
3-1. 現状の設定の確認
systemctl status httpd
systemctl status firewalld
getenforce
この3つを実行します。
それぞれどのようになるかというと・・・
ちなみに、これは3つとも要修正の状態です。どれも正しい状態ではありません。
↓それぞれの言葉について。
httpd
【参考記事】
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
Webサーバーとしての仕事をしているデーモン(常駐プログラム)のこと。
このサイトにあるように、自分もApacheをインストールしています。
Apacheを入れているから自分のパソコンでもWebサーバーとして機能することができるわけですね。
firewalld, SELinux
Linux Firewalld を一から完全に理解する
【ざっくりと理解する】SELinuxとは?
すみません、これらは自分の言葉でうまく説明できそうにないので上記のサイトに丸投げします。
3-2. 設定の変更(実はまだ足りない)
では、それぞれの修正をしたいと思います。
◆httpdを停止→起動
systemctl start httpd.service
これで起動させて、
systemctl status httpd
これで状態を確認します。
先ほどActive: inactive(dead)
だったのがActive: active(running)
になりました。
◆firewalldを起動→停止
systemctl stop firewalld.service
これで停止させて、
systemctl status firewalld
これで状態を確認します。
こちらは先ほどのhttpdとは逆で停止状態になりました。
◆SELinuxを起動→停止
【参考記事】
SELinuxの無効化
こちらを参考に永続的に無効化します。
vi /etc/selinux/config
ここで、SELINUX=enforcing
をSELINUX=disabled
に変更。
変更後はreboot
をしてサーバーを再起動します。
変更が反映されているか確認すると
きちんと修正されています。
3-3. アクセスの確認(失敗します)
これで全部の設定が終了したはずなので、いざアクセス!!
とやってみましたがまだ繋がらなかったです。
なんでよ・・・
実は、httpdとfirewalldは最後のrebootしたときに変更前の状態に戻っちゃったんですよね。
今のままだと起動するたびにさっきのコマンドをいちいち打たなくてはいけなくなるので自動起動を設定もしくは停止するように追加で修正します。
3-4. 自動起動の修正(これが最後)
◆httpd
Apacheの自動起動を有効にします。
sudo systemctl enable httpd.service
これの後に、自動起動設定を確認
systemctl is-enabled httpd.service
実行結果がenabled
であればOKです。
◆firewalld
firewalldの自動起動を無効にします。
systemctl disable firewalld.service
これの後に、自動起動設定を確認
systemctl is-enabled firewalld.service
実行結果がdisabled
であればOKです。
これでアクセスが成功するはずです。
Author And Source
この問題について(VirtualBoxのCentOS7下でsinatraのアクセスができないとき), 我々は、より多くの情報をここで見つけました https://qiita.com/hukuro310/items/3ab4e00610c1675348b8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .