以下の内容はhttps://takuya-1st.hatenablog.jp/entry/2017/08/22/210502より取得しました。


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

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

参考資料

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




以上の内容はhttps://takuya-1st.hatenablog.jp/entry/2017/08/22/210502より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14