NginxとUnicornを使用して、Fedora 19 x64サーバーにRails 4アプリをデプロイしています。問題は、アドレスにアクセスするとエラーが発生することです。 」
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
Unicorn構成ファイルまたはNginx構成ファイルをどのように変更しても、この時点で行き詰まり続けます。両方がアタッチされます:
/ var/www/[アプリ名] /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;
}
これら2つのデーモンを起動する方法は次のとおりです。
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
何時間もかけて合計3本のビールを飲んだ後、私はなんとか問題を見つけ出しました。何時間も掘り下げた後、私はついにこれに遭遇しました サーバー障害の回答
素人用語では、/tmp
(または私が発見した/var/tmp
)でファイルを作成するプログラムは、そのディレクトリ内のファイルを見ることができる唯一のプログラムのようです。 UnicornはUNIXソケットファイルを作成していましたが、Nginxはそれを見ることができませんでした。
私が採用した解決策は、Unicornに/var/sockets
のソケットを作成させることです。
Systemdスタートアップサービスを使用するようにnginxを変更した後、突然、同様の状況になりました テンプレートに基づいて 。
最終的に、問題はPrivateTmp=true
にあり、nginxが ソケットファイルにアクセスできません がgunicornによって作成されたことになります。これをPrivateTmp=false
に変更すると、エラーは解決しました。