前回の記事で、リーバースプロキシを使って Nginx と rails を連携させてみました。
今回は、Unix ドメインソケットで連携を試みてみます。
目次
参考
- Nginx - Module ngx_http_upstream_module
- Qiita - 【Rails】WEB/AP サーバ構成に応じた Nginx 設定
- Qiita - Rails5 で puma + nginx 連携
- 【nginx/unicorn】(13: Permission denied) while connecting to upstream
rails アプリを作成
最低限のアプリケーションを作ってあるものとする。
puma.rb を編集
config/puma.rb
を編集する。
1 | #ポート設定をコメントアウトして |
bundle exec rails s
で起動すると、以下のメッセージが出ます。
1 | * Listening on unix:///root/testapp/tmp/sockets/puma.sock |
どうやらソケットをリッスンできているらしい。
nginx を設定
Nginx の設定追加は,/var/nginx/conf.d
にファイルを追加することで行います。/var/nginx/conf.d/rails_apps_unix.conf
を以下のように作成します。
1 | upstream rails_app_unix { |
rails アプリケーションの実行ユーザーと nginx の実行ユーザーが同じでないと、unix:///root/testapp/tmp/sockets/puma.sock
にアクセスできない。Permission denied
となってしまう。/var/nginx/nginx.conf
を編集して nginx の実行ユーザーを rails の実行ユーザーに合わせる。
1 | # 初期はnginx |
設定が終わったら、systemctl restart nginx
を実行し、nginx を再起動。
実行ユーザーが変わっていることを確認しておきます。
1 | root 4225 0.0 0.0 120904 2148 ? Ss 00:44 0:00 nginx: master process /usr/sbin/nginx |
確認
コンソールを開いてアプリケーションのディレクトリで、bundle exec rails s
で起動します。
[サーバーのIP]
にアクセスしてみます。
すると、いつもの「Yay! You’re on Rails!」が表示される画面になりました。[サーバーのIP]/tools
なども問題なく動きます。
nginx から、puma に転送ができていることを確認できました。
今回は、nginx で受けたアクセスを unix ドメインソケットを使って puma に転送、
nginx と rails の連携ができました。
ポイントは、次の 2 つでした。
- nginx と rails の実行ユーザーをそろえる
- SELinux は必ず止めておく
これに気が付くまでに、数時間かけてしまいました。
もう少し、対応できるまでの時間を押さえたい所です。
ではでは。