Frage Standortrichtlinie funktioniert nicht


Für meinen NGINX-Server habe ich einen virtuellen Server eingerichtet, nur um statische Inhalte zu verteilen. Im Moment versuche ich es so einzurichten, dass die Bilder ein Ablaufdatum haben. Wenn ich jedoch eine Location-Direktive dafür erstelle, führt alles nur zu einem 404.

Meine Konfiguration sieht jetzt so aus:

/srv/www/static.conf 

server {
    listen                          80;
    server_name                     static.*.*;

    location / {
            root                    /srv/www/static;
            deny                    all;
    }

    location /images {
            expires                 1y;
            log_not_found           off;
            root                    /srv/www/static/images;
    }
}

Beachten Sie, dass diese Datei in /etc/nginx/nginx.conf innerhalb einer http-Direktive enthalten ist

Ich versuche auf das Bild zuzugreifen, sagen wir ... static.example.com/images/screenshots/something.png. Sicher genug, das Bild existiert auch bei /srv/www/static/images/screenshots/something.png. Allerdings funktioniert diese Adresse nicht und sagt mir einfach 404 Nicht gefunden.

Wenn ich jedoch entferne location /images und ändern location / Zu dem Folgendem...

location / {
    root /srv/www/static;
}

Es klappt! Was mache ich hier falsch?


6
2018-05-16 20:47


Ursprung




Antworten:


Ihre Konfiguration folgt der Nginx-Konfiguration Fallstricke Sie sollten es lesen, bevor Sie nginx konfigurieren.

Um Ihre Frage zu beantworten, sollten Sie nicht definieren root In Location, definieren Sie es einmal und das Location-Tag wird Ihnen automatisch den Zugriff auf bestimmte Verzeichnisse zuweisen.

Verwenden Sie anstelle des benutzerdefinierten Stammverzeichnisses für Bilderverzeichnis auch try_files. Das $uri wird abgebildet /images/ Verzeichnis mit /static/images/.

Probieren Sie diese Konfiguration aus:

server {
    listen                          80;
    server_name                     static.*.*;
    root                            /srv/www;

    location /static/ {
            deny                    all;
    }

    location /images/ {
            expires                 1y;
            log_not_found           off;
            autoindex               off;
            try_files $uri static/images$uri;
    }
}

9
2018-05-16 20:56



Vielen Dank! Ich habe die Fallstricke gelesen, aber ich denke, mein Gedächtnis hat mich im Stich gelassen. Das funktioniert, obwohl ich es für meine Zwecke leicht bearbeitet habe. - Jesse Brands
Ja, ich lese von Zeit zu Zeit wieder Teile davon, es gibt einen Grund, warum es eine separate Wiki-Seite dafür hat;) - phoops
Wenn definierend root Innerhalb location ist eine schlechte Übung, wie kommt es, dass sie es selbst in sich tragen docs / http / ngx_http_core_module.html # Alias? (Siehe wo es steht "Es ist besser, stattdessen die root-Direktive zu verwenden") KORREKTUR: Okay, es scheint, dass es falsch ist, die primäre Wurzel an einem Ort zu definieren, nicht nur irgendeine Wurzel - aexl