Die Nginx-Indexdirektive funktioniert nicht

440
Riccardo Bestetti

Im folgenden Konfigurationsausschnitt für nginx:

server { listen 443; listen [::]:433;  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;  server_name example.com;  root /var/www/example.com; index index.html; error_page 502 = @fallback; error_page 404 = @not_found;  location / { #try_files /index.html $uri =404; # A try_files $uri =404; # B }  location /service/ { rewrite ^/service/(.*)$ /$1 break;  proxy_set_header X-Load-Balancer "a"; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://127.0.0.100:42424; }  location @fallback { try_files /502.html =500; }  location @not_found { try_files /404.html =500; } } 

Warum bedient A korrekt index.html (die sich in /var/www/example.com/ befindet), aber B nicht und führt dazu, dass stattdessen die Seite 404.html geliefert wird?

1

1 Antwort auf die Frage

1
Richard Smith

Die try_filesDirektive verarbeitet jeden Begriff in der Reihenfolge, bis eine vorhandene Datei gefunden wird.

Wenn die Datei /var/www/example.com/index.htmlvorhanden ist, ist der erste Begriff in Fall (A) immer erfolgreich, und der URI wird intern in geändert /index.html. Die indexRichtlinie ist nicht beteiligt. Fall (A) gibt die Datei immer zurück /index.html.

Falls (B) try_filesnur nach Dateien und nicht nach Verzeichnissen gesucht wird . Wenn Sie try_filesein Verzeichnis abgleichen und mit dem Wert der indexDirektive verarbeiten möchten, verwenden Sie einen Begriff mit einem nachgestellten /. Zum Beispiel:

try_files $uri $uri/ =404; 

Einzelheiten finden Sie in diesem Dokument .

Erwischt! Ich erinnere mich, als ich gelesen habe, dass die `index`-Direktive auf URIs mit nachgestellten Schrägstrichen funktioniert, aber ich habe nicht sofort verstanden, dass die eigentliche Bereitstellung durch` try_files` implementiert wurde. Es macht Sinn. Vielen Dank! Riccardo Bestetti vor 5 Jahren 0
Sie brauchen `try_files` nicht, um` index` zu implementieren. Wenn Sie jedoch eine `try_files`-Anweisung haben, müssen Sie den Begriff $ uri /` hinzufügen. Andernfalls wird `index` in diesem Block deaktiviert. Richard Smith vor 5 Jahren 0
Oh ok. Ist das irgendwo in der Dokumentation angegeben? Riccardo Bestetti vor 5 Jahren 0
Der Index ist [hier dokumentiert] (http://nginx.org/de/docs/http/ngx_http_index_module.html#index). Richard Smith vor 5 Jahren 0
Ich sehe wirklich nicht, wie ich die Informationen, die Sie mir gegeben haben, aus der Dokumentation zusammengetragen hätte, die ich bereits gelesen hatte. Riccardo Bestetti vor 5 Jahren 0