Sockets Nginx找不到Unicorn的unix套接字文件(没有这样的文件或目录)

Sockets Nginx找不到Unicorn的unix套接字文件(没有这样的文件或目录),sockets,unix,nginx,ruby-on-rails-4,unicorn,Sockets,Unix,Nginx,Ruby On Rails 4,Unicorn,我正在使用Nginx和Unicorn将Rails 4应用程序部署到Fedora 19 x64服务器。问题是我在访问地址时出错:“很抱歉,出了点问题。” 我的Nginx错误日志(/var/log/Nginx/error.log)显示: 据我所知,Nginx并不知道套接字存在。但是,查看/tmp,它确实: [root@localhost tmp]# ls unicorn.[app name].sock 无论我如何修改我的Unicorn配置文件或我的Nginx配置文件,我总是在这一点上陷入困境。二者

我正在使用Nginx和Unicorn将Rails 4应用程序部署到Fedora 19 x64服务器。问题是我在访问地址时出错:“很抱歉,出了点问题。”

我的Nginx错误日志(
/var/log/Nginx/error.log
)显示:

据我所知,Nginx并不知道套接字存在。但是,查看
/tmp
,它确实:

[root@localhost tmp]# ls
unicorn.[app name].sock
无论我如何修改我的Unicorn配置文件或我的Nginx配置文件,我总是在这一点上陷入困境。二者均附呈:

/var/www/[app name]/config/unicorn.rb

working_directory "/var/www/[app name]"
pid "/var/www/[app name]/pids/unicorn.pid"
stderr_path "/var/www/[app name]/log/unicorn.log"
stdout_path "/var/www/[app name]/log/unicorn.log"
listen "/tmp/unicorn.[app name].sock"
worker_processes 2
timeout 30
upstream app {
    server unix:/tmp/unicorn.[app name].sock fail_timeout=0;
}
server {
    listen 80;
    server_name localhost;
    root /var/www/[app name]/public;
    try_files $uri/index.html $uri @app;
    location @app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app;
    }
    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}
/etc/nginx/conf.d/default.conf

working_directory "/var/www/[app name]"
pid "/var/www/[app name]/pids/unicorn.pid"
stderr_path "/var/www/[app name]/log/unicorn.log"
stdout_path "/var/www/[app name]/log/unicorn.log"
listen "/tmp/unicorn.[app name].sock"
worker_processes 2
timeout 30
upstream app {
    server unix:/tmp/unicorn.[app name].sock fail_timeout=0;
}
server {
    listen 80;
    server_name localhost;
    root /var/www/[app name]/public;
    try_files $uri/index.html $uri @app;
    location @app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app;
    }
    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}
我启动这两个守护进程的方式如下:

unicorn_rails -c /var/www/[app name]/config/unicorn.rb -D -E production
service nginx start
独角兽日志不包含相关信息,生产日志也不包含相关信息。这个设置看起来很简单,以前有人经历过吗?谢谢你能提供的帮助


顺便说一句,我最初是按照本教程进行的:

经过几个小时,总共喝了3杯啤酒,我终于找到了问题所在。经过几个小时的挖掘,我终于发现了这个

用外行术语来说,似乎只有在
/tmp
(或我发现的
/var/tmp
)中创建文件的程序才能看到该目录中的文件。Unicorn正在创建UNIX套接字文件,但是Nginx无法看到它


我采用的解决方案是让Unicorn在
/var/sockets
中创建套接字

在将nginx改为使用systemd启动服务后,我突然遇到了类似的情况


最终问题出在
PrivateTmp=true
上,这使得nginx是由gunicorn创建的。一旦我将其更改为
PrivateTmp=false
错误就解决了。

您是如何让unicorn更改dir-it用户以存储套接字的?只需修改unicorn配置文件中的listen变量即可。例如:
listen”/var/sockets/unicorn.[app name].sock“
,然后将Nginx配置为将服务器的所有连接代理到该套接字文件,例如
server unix:/var/sockets/unicorn.[app name]。sock fail\u timeout=0只是添加了一个谷歌便条,我是通过nginx报告使用上游puma服务器时出现
504网关超时
错误来到这里的。我偶然发现这个答案的唯一原因是日志显示了相同的奇怪外观
http://unix:///tmp…
正在探索的路径。所以,是的,当然不是一个独角兽特有的bug,以防任何其他使用puma或其他服务器的人发现它。Ubuntu 14.04显然展示了与fedora相同的安全协议。@mczepiel我有相同的安全协议,你能帮助吗?@mczepiel我有相同的问题,它在寻找带有http://前缀的unix套接字。socket文件肯定存在,nginx用户肯定可以访问(通过sudo-u验证),并且位于用户自定义位置,而不是/tmp。更奇怪的是,它在另一台配置几乎完全相同的服务器上工作。您有没有弄清楚是什么原因导致它将unix套接字解释为http?