Sockets Nginx找不到Unicorn的unix套接字文件(没有这样的文件或目录)
我正在使用Nginx和Unicorn将Rails 4应用程序部署到Fedora 19 x64服务器。问题是我在访问地址时出错:“很抱歉,出了点问题。” 我的Nginx错误日志(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配置文件,我总是在这一点上陷入困境。二者
/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?