Gazelle
2021年07月18日公開 1212 Views

VPS移行時サーバに繋がらない時はFirewallと管理画面のポートを疑え

ローカルで開発してきたサーバをさくらVPSやlightsailにおいて実際にWebブラウザからアクセスしようとした時に応答が無く、connection timeoutのエラーとなって開発に詰まる場合がある。

大抵はPortが開放されていない問題なので、備忘録として解決策を残す。なお、私の環境はCentOS7なので、出てくるコマンドはCentOSのコマンドであるが、基本的なプロセスは変わらないと思うので、間接的には他のDistributionを使用している方も参考になるとは思う。

簡単なテスト用Nodeプログラムを作成

まずは必ず動くと言い切れる簡単なHTTPサーバーを立ち上げよう。ブラウザにIPアドレス:3000で動けばきちんと設定できていることになる。
例えばこんな感じ

const http = require('http');
http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('hello world\n');
}).listen(3000);
console.log('Server running at http://localhost:3000/');

管理画面のポートは開放されているか?

最初に疑うべきは、管理画面でのポート制御。デフォルトでホワイトリスト制御がなされているlightsailではポートを新規に加えないことにはアクセスが遮断される。

image.png

さくらVPSはデフォルトではポートは全開放されているが、一度設定した場合は忘れないようにする必要がある。
image.png

LinuxのFirewall(ファイヤーウォール)設定

次にLinuxのFirewalldの設定を疑おう。ここで特定ポートがはじかれている可能性も高い。CentOS6までは代わりにiptableが代わりに使われていた。ちなみにFirewallはファイアウォール、ファイアーウオールなど表記のゆれが多くてつらい。「カタカナ用語不統一表記に関するアンケート」 調査結果によると40%がファイアウォールらしい。

以下すべてSudo使うかRootユーザで行う。

Firewallが起動しているかを確認

# systemctl is-enabled firewalld
enabled

開かれているポートを確認

# firewall-cmd --list-ports
3000/tcp

現在3000ポートだけが開かれていることが確認できた。

3001ポートも開けたい

firewall-cmd --permanent --add-port=3001/tcp
success

一時的にポートを許可したい場合は--permanentは不要。再起動とかしたら消えている。

--permanentを指定したときは、即座に反映されないのでreloadをする。

# systemctl reload firewalld

RailsなどいくつかのWebServerは外部アクセスをデフォルトで遮断

これでも動かない時は、起動するWebサーバ自体のオプションの可能性がある。例えばrailsでは

$ rails s -b 0.0.0.0

オプションを設定しなければ外部からアクセスできない。すなわち使用するポートをWebサーバーと結びつけ(bind)してやる必要があるのである。0.0.0.0StackOverflowの質問によると、使用マシンで使われる全てのIPアドレスらしく、外部公開アドレスも含まれる。これを-bオプションと結びつけることで外部からアクセス可能となる。

同様に最近使っていたGatsbyjsでも

$ gatsby serve -H 0.0.0.0

を指定しないと外部からのアクセスはできなかった。hはホストの意味、つまりどのIPアドレスに対してWebサービスを公開するかという設定である。

まとめ

HTTPサーバに繋がらない時にできる対処法として、にLinuxの外部(管理画面)、Linux内部のFirewall、Webサーバ自体のホスト設定の3つの可能性があることを示した。繋がらない時はこの辺を疑ってみて欲しい。

関連記事

CentOS7環境においてnginxとrails6、PUMAアプリケーションサーバを組み合わせ、RailsアプリケーションをProductionモードで動作させる手順を説明します。
2020年03月15日
ps axuをして全プロセスを表示し、該当するpidを指定してkillすれば良いという話
2020年03月18日
Railsアプリの独自ドメイン取得からSSL設定まで一貫して行います。環境はCentOS7、サーバはNginx、SSL化には無料のLet's Encryptを使用。
2020年03月18日
さくらVPSでコマンドが何故か重くなった時に、コンソールのCPU使用時間やtopコマンドでのCPU使用率を調査して原因を特定し、不要プロセスを終了させようという話。
2020年04月03日
node用version管理ツールnvmをインストールして、任意のnode versionを使う方法を解説
2020年07月30日
AWSのVPSであるLightsailを使用したインスタンスのアップグレードが非常に簡単だったため、その方法をまとめた。
2020年08月08日
Webサイトを運営するにあたり、最速なサーバを求めて複数社のVPSを比較検討してみた結果、どれも大差ないことが分かったという話
2021年04月25日
cronがうまく動かせない時はbashファイルの読み込み、実行ユーザ、相対パスの起点について疑ってみると大体動くようになるという話
2020年10月17日
VPS難民エンジニアがさくらVPS、ConoHa、LightSail、Indigoの4つの大手VPSレンタルサーバーを徹底比較。Webサイトの立ち上げやLinuxの勉強用に使い勝手の良いVPSを教えます。
2021年04月25日
Linuxのsedコマンドを使えば、簡単にファイル内の置換を行うことができる。正規表現のスラッシュ区切りを使わずにバーティカルバーを使って簡潔に書くことも可読性を高めるうえでは重要なテクニックとなる。
2021年07月07日
ホームへ戻る