Warum kann der Nginx-Puma-Sockel unter CentOS 7 nicht zugreifen?

4557
Pori

Also ich habe eine Ruby on Rails - Anwendung in /var/www/Besitz nginxmit 755Berechtigungen. Die App soll über Puma bereitgestellt werden.

So wie:

rvmsudo -u nginx bundle exec puma -e production -d -b unix:///var/www/my_app/tmp/sockets/my_app.socket 

Die Berechtigungen für den Socket sind:

srwxrwxrwx. 1 nginx nginx 0 Nov 6 09:43 tmp/sockets/my_app.sock 

Der Prozess ist natürlich im Besitz von nginx:

nginx 7335 0.0 8.8 536744 90388 ? Sl 09:43 0:00 puma 2.9.2 (unix:///var/www/my_app/tmp/sockets/my_app.sock) 

Meine nginxKonfigurationskonfiguration ist wie folgt:

upstream my_app { server unix:///var/www/my_app/tmp/sockets/my_app.sock; }  server { listen 80; server_name www.example.com example.com; root /var/www/my_app/public;  location / { proxy_pass http://my_app; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 

Diesem und meiner Anwendung werden weiterhin Berechtigungen verweigert.

connect() to unix:///var/www/my_app/tmp/sockets/my_app.sock failed (13: Permission denied) while connecting to upstream, 

Ich habe das alles auch als root-Benutzer ausprobiert. Aber es funktioniert immer noch nicht.

Weiß jemand, was ich falsch mache?

6
Auch für mich. Hast du eine Lösung gefunden? Kamil Lelonek vor 9 Jahren 0
Ja, habe ich! Siehe Antwort unten. Pori vor 9 Jahren 0

1 Antwort auf die Frage

9
Pori

Halleluja! Es stellte sich heraus, dass dies ein SELinux-Richtlinienproblem war, das sich speziell auf nginx bezieht. Nach stundenlangem Graben entdeckte ich solche Ablehnungen durch Ausführen von:

sudo grep nginx /var/log/audit/audit.log 

Die Nachrichten sahen so aus:

type=AVC msg=audit(1415283617.227:1386): avc: denied { write } for pid=1683 comm="nginx" name="my_app.sock" dev="tmpfs" ino=20657 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_run_t:s0 tclass=sock_file 

Um dies zu korrigieren, fand ich einen wunderbaren Artikel von Axilleas .

Um die Richtlinie mit den erforderlichen Berechtigungen zu erstellen, musste ich Folgendes installieren audit2allowund ausführen:

grep nginx /var/log/audit/audit.log | audit2allow -M nginx 

Sobald dies erledigt war, habe ich die Richtlinie mit:

semodule -i nginx.pp 

Leider musste ich diesen Vorgang zweimal ausführen, bevor ich auf meine Anwendung zugreifen konnte, da weitere Richtlinien erforderlich waren. Trotzdem war hier die Lösung.

Es gibt auch einen weiteren schönen Artikel von Sergiy Krylkov .

Moral der Geschichte: Lernen Sie SELinux.

Vielen Dank!!! Ich habe dutzende Stunden damit verbracht, das gesamte Internet zu durchsuchen. Es funktioniert jetzt! AntonAL vor 8 Jahren 0
Kein Problem! Ich bin froh, dass meine Erfahrung jemand anderem helfen konnte. Pori vor 8 Jahren 0