Nginx se faisant refuser l’autorisation lors de la connexion à Unicorn

J’ai essayé de nombreuses suggestions en ligne, mais rien n’a fonctionné. Je travaille avec unicorn et nginx pour déployer une application ruby ​​on rails sur un serveur CentOS 6.5. Cela a fonctionné avant, mais maintenant j’obtiens la mauvaise erreur de passerelle quand j’essaye de remonter le site. Les deux fichiers principaux avec lesquels je travaille sont le fichier de configuration unicorn.rb et le fichier default.conf de nginx. Les emplacements de ces fichiers sont: /home/myuser/myApp/config/unicorn.rb et /etc/nginx/conf.d/default.conf. Voici ce qu’ils contiennent:

licorne.rb

Set the working application directory # working_directory "/path/to/your/app" working_directory "/home/myuser/myApp" # Unicorn PID file location # pid "/path/to/pids/unicorn.pid" pid "/home/myuser/myApp/pids/unicorn.pid" # Path to logs # stderr_path "/path/to/log/unicorn.log" # stdout_path "/path/to/log/unicorn.log" stderr_path "/home/myuser/myApp/log/unicorn.log" stdout_path "/home/myuser/myApp/log/unicorn.log" # Unicorn socket # listen "/tmp/unicorn.[app name].sock" listen "/home/myuser/myApp/tmp/unicorn.myApp.sock" # Number of processes # worker_processes 4 worker_processes 2 # Time-out timeout 30 

default.conf

 upstream app { # Path to Unicorn SOCK file, as defined previously server unix:/home/myuser/myApp/tmp/unicorn.myApp.sock fail_timeout=0; } server { listen 80; server_name localhost; # Application root, as defined previously root /root/myApp/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; } 

J’essaye de lancer ce truc de myuser donc je ne veux pas déplacer le fichier Licorne ou myApp. Pour ce faire, j’ai suivi https://www.digitalocean.com/community/articles/how-to-deploy-rails-apps-using-unicorn-and-nginx-on-centos-6-5 mais j’ai modifié les répertoires pour certaines des étapes. Je sais que le tutoriel fonctionne lorsque je ne modifie pas les répertoires, mais je dois vraiment le faire fonctionner chez moi. Toute aide est appréciée.

On dirait que le problème est en nginx. En regardant le fichier nginx error.log, j’obtiens ceci:

 2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/tasks/index.html" failed (13: Permission d$ 2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/tasks" failed (13: Permission denied), cli$ 2014/03/05 14:53:04 [crit] 5756#0: *1 connect() to unix:/home/myuser/myApp/tmp/unicorn.myApp.sock failed (13: Per$ 2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/500.html/index.html" failed (13: Permissio$ 2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/500.html" failed (13: Permission denied), $ 2014/03/05 14:53:04 [crit] 5756#0: *1 connect() to unix:/home/myuser/myApp/tmp/unicorn.myApp.sock failed (13: Per$ 2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/favicon.ico/index.html" failed (13: Permis$ 2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/favicon.ico" failed (13: Permission denied$ 2014/03/05 14:53:04 [crit] 5756#0: *1 connect() to unix:/home/myuser/myApp/tmp/unicorn.myApp.sock failed (13: Per$ 2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/500.html/index.html" failed (13: Permissio$ 2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/500.html" failed (13: Permission denied), $ 2014/03/05 14:53:04 [crit] 5756#0: *1 connect() to unix:/home/myuser/myApp/tmp/unicorn.myApp.sock failed (13: Per$ 

L’une des solutions que j’ai trouvées en ligne consiste à désactiver SELinux. J’ai essayé et ça n’a pas aidé. Ces fichiers sont tous 777 sur les permissions, donc cela ne devrait pas se produire. Des idées?

J’ai trouvé le problème. Le chemin d’access à unicorn.myapp.sock devait aller dans le répertoire / tmp sous root plutôt que dans le répertoire myuser. De plus, le chemin racine dans mon fichier nginx default.conf devait être à la racine / myApp / public plutôt que de ce que j’avais. Je n’ai aucune idée de ce que cette dernière partie signifie, mais ça marche et je suis content. Merci à tous ceux qui m’ont aidé à arriver ici.

J’ai fait face à un problème 502 Bad Gateway hier sur mon Ubuntu 12.10 et nginx et unicorn. Ce type d’erreurs est trop générique. Le mieux que je puisse faire est de vous aider à trouver plus de détails sur les erreurs sous-jacentes. Dans mon cas, j’ai pu déterminer la cause en consultant la fin de mon fichier journal Licorne.

 tail -n 100 /home/unicorn/log/unicorn.log 

Votre journal de licorne peut être situé ailleurs, je suis sur un serveur Digital Ocean avec la configuration de l’application rails. Mais je pense que vous trouverez la cause de l’erreur que vous recevez dans votre fichier journal Licorne. Sinon, vérifiez votre journal des erreurs nginx.

Dans mon cas, j’avais des versions de gemme conflictuelles entre les gems système et mon application (unicorn ne s’exécute pas sous exec de bundle, sur mon todo) mais votre problème est peut-être autre chose. Les journaux vous aideront à déterminer la cause du 502 Bad Gateway.

J’ai eu ce problème récemment. Unicorn était exécuté correctement et le journal de ses erreurs était correct. Le journal des erreurs de Nginx montrait des messages “échec 13: Autorisation refusée”. Comme beaucoup d’autres utilisateurs, j’ai vérifié les permissions du fichier unicorn.sock et elles étaient correctes.

Le problème était que non seulement le fichier unicorn.sock nécessitait les permissions correctes; Le chemin d’access complet au fichier Licorne doit également disposer d’permissions lisibles.

 chmod o+r 

Après avoir modifié les permissions sur ces dossiers, la magie s’est produite.