108:Unixドメインソケットによるリバースプロキシ接続¶
コラム: 謎のファイル .sock
後輩W:Nginxから
unix:/var/run/gunicorn.sock
と指定する手順だったので指定したけれど、No such file or directory
というエラーが出ました。ls /var/run/
してみたらファイルがなかったので別の環境からgunicorn.sock
をコピーしてきたけど、動きません。先輩T:おっと、
gunicorn.sock
はファイルじゃないからコピーで持ってきてもだめだぞ。後輩W:ファイルじゃない??
先輩T:たぶん、Gunicornが
gunicorn.sock
を用意する構成だと思うけど、Gunicornの起動コマンドオプションはどうなってる?後輩W:systemdで
gunicorn -b 0.0.0.0:8000 apps.wsgi:application
になってます。先輩T:なるほど、それだとGunicornはTCP 8000で待ち受けしてるのにNginxがUnixドメインソケットでリバースプロキシ接続しようとしてエラーになってるんだね。
(中略)詳細は書籍 自走プログラマー をご参照ください
ベストプラクティス¶
WebサーバーとWebアプリケーションサーバーの通信方式を合わせましょう。 可能なら、TCPよりも高速なUnixドメインソケットによるリバースプロキシ接続を使用しましょう。
Unixドメインソケット は ソケット 1 の一種で、ネットワーク通信で使います。
ソケットには、Unixドメインソケットの他に、 TCP/IP
や UDP
などがあります。
ソケット通信を行うには、TCP/IP通信であれば <IP>:<PORT>
を使用しますが、Unixドメインソケットによる通信では、ファイルパスを使用します 2 。
待ち受け側と接続側の両方でこのファイルパスを使うことで、ソケット通信ができるようになっています。
- 1
- 2
他に、無名ソケットや、抽象名前空間を使ったソケットをバインドできます。詳しくは次のページを参照してください: https://linuxjm.osdn.jp/html/LDP_man-pages/man7/unix.7.html
(中略)詳細は書籍 自走プログラマー をご参照ください