proxy_pass nicht funktioniert, wenn SELinux aktiviert ist, warum?
Ich habe eine Anwendung lauscht auf port 8081 und Nginx läuft auf port 8080. Der proxy-pass-Anweisung sieht wie folgt aus:
$ cat /var/etc/opt/lj/output/services/abc.servicemanager.conf
location /api/abc.servicemanager/1.0 { proxy_pass http://localhost:8081;}
In nginx.conf
ich die Datei als:
include /etc/nginx/conf.d/services/*.conf;
Den /etc/nginx/conf.d/service
ist ein symlink:
# ll /etc/nginx/conf.d/
lrwxrwxrwx. 1 root root 39 Dec 10 00:19 services -> ../../../var/etc/opt/lj/output/services
Dies ist ein CentOS 7.0 Aktiviertem SELinux-system. Wenn ich setenforce 0
, und machen es zu Freizügig, sehe ich keine Probleme. Also die Datei ist im richtigen Platz und keine Probleme mit Pfaden. Wenn SELinux enforcing, sehe ich Folgendes im audit-log:
type=AVC msg=audit(1418348761.372:100930): avc: denied { getattr } for pid=3936 comm="nginx" path="/var/etc/opt/lj/output/services/abc.servicemanager.conf" dev="xvda1" ino=11063393 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=file
Möchte ich wissen, wie zu aktivieren Nginx zu finden, die conf-Datei, ohne zu müssen, um SELinux zu deaktivieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erwähnenswert für Anfänger in SELinux, dass, wenn Sie Ihre Proxy-Dienst läuft auf 8080 verwenden, können Sie den folgenden Befehl ein, ohne zu kompilieren Politik.
... { getattr } .. path="......."...
. Bitte korrigieren Sie mich, wenn ich falsch Liege.Lesen über audit2allow und benutzte es, um eine Richtlinie zu erstellen um den Zugang zu den verweigert Anfragen für Nginx.
Schritt 1 umfasst die Ausführung
audit2allow
targeting nginxlocalconf:Schritt 2, review-Ergebnisse:
Überprüfen Sie die Schritte zur Aktivierung:
Schritt 3 aktiv:
Lieber immer wechselnden Typen zum erstellen von benutzerdefinierten Richtlinien. In diesem Fall Nginx dienen Dateien mit der
httpd_sys_content_t
geben. Vorausgesetzt die Dateien befinden sich in /var/www:Wenn Sie einen anderen port oder benutzerdefinierter port zulassen:
Zeigen, dass die port in http:
Dies ist die Ausgabe in mein localhost:
Und ermöglichen 8081:
... { getattr } .. path="......."...
. Bitte korrigieren Sie mich, wenn ich falsch Liege.