UNIXドメインソケット
単一マシン上の高効率なプロセス間通信に用いられる機能・インターフェースの一種である
- ファイルシステムを介してプロセス同士の通信を行う仕組み
- 普通にリバースプロキシするより高速だが、ファイルシステムを介するので単一マシン上でしか動作できない
- UnicornとNginxが同一マシン上にある場合は、これ一択
Railsの場合の設定方法
config/unicorn-config.rb
# Nginxとはソケット通信 listen "/tmp/unicorn.sock"
- listen +
ソケットのPATH
でリスナーを設定する
nginx側の設定
http { upstream unicorn { server unix:/tmp/unicorn-cms.sock } location / { proxy_pass http://unicorn; } }
server
でunix:${path}
で、unicornで設定したUNIXドメインソケットのpathを設定するproxy_pass
でリクエストをUNIXドメインソケットに渡す
リバースプロキシ
普通にTCP通信で、unicornにリクエストを投げる方法
- UNIXドメインソケットより低速
- UnicornとNginxが別マシンの場合はこちら
Railsの場合の設定方法
config/unicorn-config.rb
listen 3000
- listen +
ポート番号
でリスナーを設定する
nginx側の設定
http { upstream unicorn { server exsample.com:3000 } location / { proxy_pass http://unicorn; } }
server
でドメイン:ポート番号
で、Unicornがある転送先を設定proxy_pass
でリクエストを転送先に渡す
DockerでUnicornとNginxが別コンテナの場合
別コンテナでもボリューム経由でファイルを共有できるので、UNIXドメインソケットを使える
やっぱりコンテナ間で通信より、早いらしいので、UNIXドメインソケットを使ったほうが良い