unix:/var/.../unicorn.sock にアクセスできないの
nginx の プロキシの upstream を unix ドメインソケットに設定したのだけれど動かないのね。 だから、ソケットが正しく動いてるかテストしてみたかったの。
nc コマンドと組合せて使うことで、テストできる。
nc -U unix:/path/to/some.sock
コレを使えばコマンドからunixソケットにアクセスして、アクセス可能かテストできるし、パーミッションもここでテストできる。
echo ' GET / ' | nc -U /path/to/unicorn.sock
これで応答するか調べられる。
パーミッションのテストをするときは pkexec を使えば楽
pkexec でnc 実行して別ユーザからの読込とアクセスを見てみたら確認できた
echo "GET /" | sudo pkexec --user www-data nc -U /var/opt/gitlab/gitlab-workhorse/socket nc: unix connect failed: Permission denied
これで、 www-data ( nginx ) から gitlab のソケットにアクセスできてないことが分かる。
usermod でグループに追加
アクセス出来ないときはパーミッションをいじるよりもグループをいじったほうが確実だね。
usermod -aG gitlab-wwwdata www-data
これで試してみる
nc でアクセス出来るから試す例
echo "GET /" | sudo pkexec --user www-data nc -U /var/opt/gitlab/gitlab-workhorse/socket HTTP/1.1 400 Bad Request Content-Type: text/plain; charset=utf-8 Connection: close
400 Bad request が正しく返ってくるので通信できることがわかった。これでnginx の設定が間違ってないことが確認できて安心。
2018-02-03 追記
traditional な nc ( netcat ) は -U オプションが存在しないので、invalid オプションになる。
/bin/nc.openbsd
nc: invalid option -- 'U' nc -h for help
BSDパッケージのnetcat をインストールする必要があった。
apt install netcat-openbsd