Standortrichtlinie funktioniert nicht

10

Für meinen NGINX-Server habe ich einen virtuellen Server eingerichtet, der nur statische Inhalte austeilt. Im Moment versuche ich, es so einzurichten, dass Bilder ein Ablaufdatum haben. Wenn ich jedoch eine Standortanweisung dafür erstelle, ergibt alles nur einen 404.

Meine aktuelle Konfiguration sieht folgendermaßen 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 aus /etc/nginx/nginx.conf in einer http-Direktive enthalten ist

Ich versuche , das Bild zugreifen, um, sagen wir mal ... static.example.com/images/screenshots/something.png. Sicher genug, das Bild existiert auch bei /srv/www/static/images/screenshots/something.png. Das Aufrufen dieser Adresse funktioniert jedoch nicht und sagt mir einfach, dass 404 nicht gefunden wurde .

Wenn ich jedoch entferne location /imagesund location /zu folgendem wechsle ...

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

Es klappt! Was mache ich hier falsch?

Jesse Brands
quelle

Antworten:

14

Ihre Konfiguration folgt den Fallstricken bei der Nginx-Konfiguration. Sie sollten sie lesen, bevor Sie Nginx konfigurieren.

Um Ihre Frage zu beantworten, sollten Sie nicht den rootStandort definieren, sondern ihn einmal definieren. Mit dem Standort-Tag können Sie automatisch Zugriff auf bestimmte Verzeichnisse zuweisen.

Verwenden Sie auch anstelle des benutzerdefinierten Stammverzeichnisses für das Bilderverzeichnis try_files. Das $uriwird /images/Verzeichnis mit zuordnen /static/images/.

Versuchen Sie diese Konfiguration:

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;
    }
}
Phoops
quelle
Vielen Dank! Ich habe die Fallstricke gelesen, aber ich denke, mein Gedächtnis hat mich verlassen. Dies funktioniert, obwohl ich es für meine Zwecke leicht bearbeitet habe.
Jesse Brands
Ja, ich lese von Zeit zu Zeit selbst Teile davon neu. Es gibt einen Grund, warum es eine separate Wiki-Seite dafür gibt;)
Phoops
Wenn das Definieren von rootInside locationeine schlechte Praxis ist, warum spenden sie es dann selbst in docs / http / ngx_http_core_module.html # alias ? (Sehen Sie, wo es heißt " es ist besser, stattdessen die Root-Direktive zu verwenden ") KORREKTUR : Okay, es scheint, dass das, was falsch ist, darin besteht, die primäre Wurzel an einem Ort zu definieren, nicht an irgendeiner Wurzel
aexl