IT技術にまつわる実験ノート

「長編を書くより、短編を数多く完成させてください。それが上達への近道です」 by 手塚治虫

Rails5 + Puma + Nginx でハマって解決した話

とにかく、Nginx の設定を以下のようにして、アクセスできるようになった。

  • less /etc/nginx/sites-available/matt-note.ml

f:id:matt-note:20190122230853p:plain

  • less config/puma.rb

f:id:matt-note:20190122231004p:plain

とにかく手探りで試行錯誤して、最後に proxy_pass を http にしたところ、やっとアクセスできるようになった。なお、上記の設定はあくまで参考用で、かなり雑な設定だと思います。

 

そもそも論

上記のように、server { } 内に access_log や error_log を指定しておく。エラーが出たら、error_log のファイルを見てエラーメッセージをググっていくことを繰り返すと、少しずつエラーを修正できる。なお、上記の設定の場合は、以下のようにするとエラーログを閲覧できる。

  • cat /var/log/nginx/matt-note.ml_error.log

 

chown

パーミッションでエラーになった場合は、chown コマンドで修正しておく。

f:id:matt-note:20190122214855p:plain

 

chmod

AWS の EC2 のホームディレクトリのパーミッションは、デフォルトで 700 になっているとのこと。

f:id:matt-note:20190123195001p:plain

なお、GCP ではホームディレクトリのパーミッションはデフォルトで 701 になっている。

f:id:matt-note:20190123195439p:plain

 

try_files

よくわからないが、try_files の $uri/ を削除したところ、エラーメッセージが変化して先に進むことができた。ここでは index.html を直接使うわけではないので、この点がエラーの原因になってしまうとのこと。

f:id:matt-note:20190122212128p:plain

この点を修正したところ、エラーログは以下のように変化した。「index は forbidden です」から「unknown protocol」となった。

f:id:matt-note:20190122212746p:plain

f:id:matt-note:20190122212830p:plain

 

proxy_pass を修正する

手探りで設定をいじくっていたところ、proxy_pass を https で指定してしまっていた。結局、これを http に修正して、ようやくエラーを出さずにアクセスできるようになった。

 

あとは nginx を再起動して、サーバーを起動させてアクセスすれば良い。

  • sudo service nginx restart
  • bundle exec pumactl start

f:id:matt-note:20190122230524p:plain

f:id:matt-note:20190122214144p:plain

 

まとめ

Nginx の server{ } 内に error_log を指定しておくと、手探り状態から少し脱却できる。