Nginx无法find与Unicorn的unix套接字文件(没有这样的文件或目录)

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

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

 2014/03/08 03:50:12 [warn] 23934#0: conflicting server name "localhost" on 0.0.0.0:80, ignored 2014/03/08 03:50:12 [warn] 23936#0: conflicting server name "localhost" on 0.0.0.0:80, ignored 2014/03/08 03:50:14 [crit] 23939#0: *1 connect() to unix:/tmp/unicorn.[app name].sock failed (2: No such file or directory) while connecting to upstream, client: [client IP], server: localhost, request: "GET /v1/industries/1.xml HTTP/1.1", upstream: "http://unix:/tmp/unicorn.[app name].sock:/v1/industries.json", host: "api.[app name].ca" 

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

 [root@localhost tmp]# ls unicorn.[app name].sock 

无论如何修改我的Unicornconfiguration文件或我的Nginxconfiguration文件,我一直在这个问题上陷入困境。 两者都被提出:

/ 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 

/etc/nginx/conf.d/default.conf

 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 

Unicorn日志不包含相关信息,也不包含生产日志。 这个设置看起来很简单,有没有人经历过这个? 感谢您的任何帮助,您可以提供。

顺便说一下,我最初是按照这个教程: https : //www.digitalocean.com/community/articles/how-to-deploy-rails-apps-using-unicorn-and-nginx-on-centos-6-5

几个小时后,总共有三杯啤酒,我已经设法弄清楚了这个问题。 经过数小时的挖掘,我终于遇到了这个服务器故障的答案

用外行的话来说,在/tmp (或者我发现的/var/tmp )中创建文件的程序似乎是唯一能够看到那个目录中的文件的程序。 Unicorn正在创建UNIX套接字文件,但Nginx无法看到它。

我使用的解决方案是让Unicorn在/var/sockets创建/var/sockets

在将nginx改为使用基于模板的systemd启动服务之后,我突然出现了类似的情况。

最后问题是PrivateTmp=true ,这使得nginx 无法访问由gunicorn创建的套接字文件 。 一旦我改变这个到PrivateTmp=false ,错误解决了。

我遇到的问题之一是nginx错误日志没有正确的路径:

这个命令将会派上用场来知道确切的nginx错误

 tail -f /var/log/nginx/error.log