前回の記事で、リーバースプロキシを使って 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 は必ず止めておく
 
これに気が付くまでに、数時間かけてしまいました。
もう少し、対応できるまでの時間を押さえたい所です。
ではでは。