Statische Nginx-Dateikonfiguration für die minimale Installation von CenotOS 7

Statische Nginx-Dateikonfiguration für die minimale Installation von CenotOS 7

Ich habe eine brandneue VM mit der Minimalinstallation von CenotOS 7.

Ich möchte Nginx so konfigurieren, dass statische Dateien aus einem Verzeichnis auf bereitgestellt werden localhost:80.

Mein Verzeichnis ist /home/kenny/projects/kcrypt/dist/.

Hier ist der Inhalt meines /etc/nginx/nginx.conf:

# this is set to root in order to rule out
# any permission related issues.
user root;    

worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        root         /home/kenny/projects/kcrypt/dist/;
        index index.html;

        location / {
        }
    }
}

beim Ausführen curl http://localhosterhalte ich diese Antwort:

<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.12.2</center>
</body>
</html>

Ich habe versucht, allen mir eingefallenen Verzeichnissen alle möglichen Berechtigungen zu erteilen.

Am Ende habe ich Nginx so konfiguriert, dass es als Root ausgeführt wird.

Ich habe das Betriebssystem bereits mehrmals neu installiert und bekomme es nicht zum Laufen.

PS

Das habe ich gefunden in/var/log/nginx/error.log

2018/02/27 21:33:19 [error] 15689#0: *1 open() "/home/kenny/projects/kcrypt/dist/index.html" failed (13: Permission denied), client: ::1, server: , request: "GET / HTTP/1.1", host: "localhost"
2018/02/27 21:33:35 [error] 15690#0: *2 open() "/home/kenny/projects/kcrypt/dist/index.html" failed (13: Permission denied), client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "127.0.0.1"
2018/02/27 21:33:38 [error] 15690#0: *3 open() "/home/kenny/projects/kcrypt/dist/index.html" failed (13: Permission denied), client: ::1, server: , request: "GET / HTTP/1.1", host: "localhost"

Ich verstehe nicht, was es will ... Ich habe ihm alle Berechtigungen erteilt, die ich konnte.

Folgendes habe ich im Stammverzeichnis:

[root@vm3 dist]# ll
total 368K
drwxrwxrwx. 2 root root   98 Feb 26 23:16 .
drwxrwxrwx. 6 root root  234 Feb 27 21:26 ..
-rwxrwxrwx. 1 root root 1.2K Feb 26 23:16 favicon.ico
-rwxrwxrwx. 1 root root 1.7K Feb 26 23:16 index.html
-rwxrwxrwx. 1 root root 175K Feb 26 22:53 index.js
-rwxrwxrwx. 1 root root  297 Feb 26 23:16 manifest.json
-rwxrwxrwx. 1 root root 179K Feb 26 22:53 styles.css

PS 2

Ich habe versucht, meine statischen Dateien einzufügen /var/www/kcrypt/dist/, aber ohne Ergebnis.

Ich erhalte immer noch die gleichen Fehlermeldungen:

2018/02/27 23:18:11 [error] 16157#0: *1 open() "/var/www/kcrypt/dist/index.html" failed (13: Permission denied), client: ::1, server: , request: "GET / HTTP/1.1", host: "localhost"
2018/02/27 23:20:58 [error] 16535#0: *1 open() "/var/www/kcrypt/dist/index.html" failed (13: Permission denied), client: ::1, server: , request: "GET / HTTP/1.1", host: "localhost"
2018/02/27 23:21:30 [error] 16564#0: *1 open() "/var/www/kcrypt/dist/index.html" failed (13: Permission denied), client: ::1, server: , request: "GET / HTTP/1.1", host: "localhost"

Antwort1

Auf Ihrem System ist SELinux aktiviert. Standardmäßig erlaubt SELinux dem Webserver nicht, Dateien in den Home-Verzeichnissen der Benutzer zu lesen. Die für die Webbereitstellung aktivierten Verzeichnisse sind /var/www(wo Systempakete Dateien ablegen) und /srv/www(wo Benutzer in der Produktion Dateien ablegen sollen).

Wenn Sie Dateien aus Home-Verzeichnissen bereitstellen müssen, können Sie den booleschen Wert von SELinux festlegen httpd_read_user_content, der das Lesen dieser Dateien ermöglicht.

setsebool -P httpd_read_user_content 1

Beachten Sie, dass SELinux dem Webserver niemals erlaubt,schreibenin Benutzer-Home-Verzeichnissen. Wenn Sie dies benötigen, müssen Sie Ihre Webinhalte woanders platzieren undMachen Sie die entsprechenden Verzeichnisse beschreibbar.


Denken Sie auch daran, dass SELinux funktioniertzusätzlich zureguläre UNIX-Berechtigungen, daher müssen die relevanten Dateien und Verzeichnisse auch über die entsprechenden Eigentümer und Berechtigungen verfügen, was auch immer diese für Ihren spezifischen Anwendungsfall sein werden.

verwandte Informationen