それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

コマンドからunix ドメインソケットのパーミッションを実験する

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 の設定が間違ってないことが確認できて安心。

参考資料

https://unix.stackexchange.com/questions/26715/how-can-i-communicate-with-a-unix-domain-socket-via-the-shell-on-debian-squeeze