6 votes

Apache, Permission denied on mod_wsgi, corrigé avec WSGISocketPrefix -- Mais pourquoi ?

Dans ce qui semble être un événement aléatoire, un site est tombé en panne ce soir et après avoir jeté un coup d'œil aux journaux d'erreurs d'Apache, il s'agissait de ce problème :

 (13)Permission denied: mod_wsgi (pid=2751): Unable to connect to WSGI daemon process 'mysite.com-ssl' on '/var/run/apache2/wsgi.2579.0.2.sock' after multiple attempts.

Maintenant, je lis le Problèmes de configuration wiki pour mod_wsgi, et la correction semble raisonnable. Il n'est pas possible d'écrire dans ce répertoire, une alternative doit donc être spécifiée avec la commande WSGISocketPrefix

Je me suis donc mis en route :

WSGISocketPrefix /var/run/wsgi

Il corrige le problème et le site peut se charger après un redémarrage d'Apache.

Cependant, je suis très curieux de savoir pourquoi ce répertoire a cessé d'être disponible en écriture. Ai-je raté quelque chose ? Le /var/run/apache2 appartient à root:root mais les nouveaux sockets qui fonctionnent désormais sous le nom de /var/run/wsgi*.sock son www-data:root .. Il y a eu un redémarrage du serveur, mais c'est tout. Peut-être que quelque chose prend maintenant les permissions sur ce répertoire au démarrage ?

Des idées ? Merci de votre compréhension.

8voto

Jason Points 8799

L'erreur que vous avez constatée peut également se produire de manière transitoire si vous avez procédé à un redémarrage gracieux d'Apache et qu'un processus de travail Apache avait des connexions de socket encore vivantes qui n'avaient pas encore été appelées par le processus démon mod_wsgi pour la requête initiale ou les requêtes ultérieures en raison du maintien en vie du socket.

Cela se produit parce que lors du redémarrage gracieux, les processus du démon mod_wsgi sont redémarrés de toute façon et, ce faisant, le chemin d'accès au fichier de socket est modifié. Cela signifie que les anciens processus de travail en attente pour gérer les requêtes courantes et les requêtes keepalive ne parviendront pas à se connecter au démon car ils essaieront toujours d'utiliser l'ancien chemin pour le fichier de socket.

En ce qui concerne le répertoire où se trouvent les fichiers de socket, l'important est qu'il soit lisible par www-data. Les sockets seront créés en tant que root au départ avec les perms 0600 et ensuite la propriété doit être changée en www-data pour que les processus de travail de www-data puissent se connecter et rien d'autre. Cela dépend du fait que le répertoire soit toujours accessible à www-data.

La raison de WSGISocketPrefix est que Redhat a fait en sorte que le répertoire des logs, où la configuration d'Apache indique de mettre ce genre de choses par défaut, ne soit pas lisible par d'autres, de sorte que www-data ne puisse pas voir les sockets dans le répertoire. C'est pourquoi, sur Redhat, il faut le changer en /var/run.

Je ne sais pas à quel moment les permissions des répertoires sont modifiées ou corrigées et si cela peut se produire sans mise à jour du paquet Apache.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X