naichi's lab

3日後の自分(他人)への書き置き

nginx+unicorn、ソケットファイルを/tmp上に置くとNo such file or directoryになる

nginx+unicornでrailsを動かそうとしてる。

unicornの起動はできたっぽいけどnginx側でエラーする。

症状まとめ

環境

  • centos7
  • unicorn v5.0.1
  • nginx/1.8.0

/var/log/nginx/error.log

2015/12/27 22:53:49 [crit] 30088#0: *109 connect() to unix:/tmp/unicorn-unityroom.com.socket failed (2: No such file or directory) while connecting to upstream, client: 60.238.252.251, server: naichilab.com, request: "GET / HTTP/1.1", upstream: "http://unix:/tmp/unicorn-unityroom.com.socket:/500.html", host: "naichilab.com"

~/shared/log/unicorn.stderr.log

I, [2015-12-27T22:57:35.698916 #15321]  INFO -- : reaped #<Process::Status: pid 15325 exit 0> worker=0
I, [2015-12-27T22:57:35.699033 #15321]  INFO -- : reaped #<Process::Status: pid 15328 exit 0> worker=1
I, [2015-12-27T22:57:35.699116 #15321]  INFO -- : master complete
I, [2015-12-27T22:57:36.170900 #18582]  INFO -- : Refreshing Gem list
I, [2015-12-27T22:57:37.387321 #18582]  INFO -- : unlinking existing socket=/tmp/unicorn-unityroom.com.socket
I, [2015-12-27T22:57:37.387507 #18582]  INFO -- : listening on addr=/tmp/unicorn-unityroom.com.socket fd=10
I, [2015-12-27T22:57:37.403895 #18582]  INFO -- : master process ready
I, [2015-12-27T22:57:37.404796 #18586]  INFO -- : worker=0 ready
I, [2015-12-27T22:57:37.407383 #18589]  INFO -- : worker=1 ready

/etc/nginx/nginx.conf

user  nginx;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

worker_processes  2;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    server_names_hash_bucket_size 64;

    client_max_body_size 64m;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log main buffer=16k;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;

    keepalive_timeout  65;
    keepalive_requests 100;

    #gzip  on;


    upstream unicorn {
        server unix:/tmp/unicorn-unityroom.com.socket;
    }

    include /etc/nginx/conf.d/*.conf;
}

/tmp/unicorn-unityroom.com.socket

# ls -la /tmp/ | grep unicorn
srwxrwxrwx   1 unityroom_production unityroom_production      0 12月 27 22:57 unicorn-unityroom.com.socket

どーみても存在してる。 なぜ見えない。

ぐぐった

PrivateTmpっていうののせいで/tmp上のファイルを他のプロセスと共有できないみたい。

対応

ソケットファイルを別の場所に作るようにする。

変更前:/tmp/unicorn-unityroom.com.socket

変更後:#{app_shared_path}/tmp/unicorn.sock

エラーが変わった

2015/12/27 23:39:00 [crit] 23374#0: *1 connect() to unix:/home/unityroom_production/shared/tmp/unicorn.sock failed (13: Permission denied) while connecting to upstream, client: 60.238.252.251, server: naichilab.com, request: "GET / HTTP/1.1", upstream: "http://unix:/home/unityroom_production/shared/tmp/unicorn.sock:/500.html", host: "naichilab.com"
$ ls -la
srwxrwxrwx 1 unityroom_production unityroom_production  0 12月 27 23:38 unicorn.sock

この頭にあるsってなんだっけなぁ。