it-swarm.com.de

Wie setze ich index.html als Root-Datei in Nginx ein?

So legen Sie index.html für den Domainnamen fest, z. https://www.example.com/ - führt den Benutzer zu index.html im Stammverzeichnis. 

Ich habe verschiedene Dinge ausprobiert wie: 

server {
    # some configs

    location = / {
            index index.html;
            fastcgi_index index.html;
    }
or 
    location / {
            index index.html;
            fastcgi_index index.html;
    }

}

Nichts hat mir geholfen. 

Es gibt einige andere Konfigurationen mit dem Schlüsselwort location, obwohl ich sie auch kommentiert habe.

Andere "location" -Konfigurationen in der server {-Klausel: 

location ~ .*(css|htc|js|bmp|jp?g|gif|ico|cur|png|swf|htm?|html)$ {
        access_log off;
        root $www_root;
}

location ~ \.php$
{
        include                         /etc/nginx/fastcgi_params;
        index                           index.html;
        fastcgi_index                   index.html;
        fastcgi_param SCRIPT_FILENAME   $www_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING      $query_string;
        fastcgi_param PATH_INFO         $fastcgi_path_info;
        fastcgi_pass                    127.0.0.1:9000;
        # Директива определяет что ответы FastCGI-сервера с кодом больше или равные 400
        # перенаправлять на обработку nginx'у с помощью директивы error_page
        fastcgi_intercept_errors        on;
        break;
}

location ~ /\.ht {
    deny all;
}

Alle waren kommentiert und unkommentiert, aber nichts half.

PS-Editionen wurden in der Datei /etc/nginx/sites-enabled/domainname.com erstellt.

36
Arthur Kushman

Die Antwort besteht darin, das Wurzelverzeichnis zu den Standortanweisungen zu platzieren:

root   /srv/www/ducklington.org/public_html;
16
Arthur Kushman

in Ihrem Standortblock können Sie Folgendes tun:

location / {
  try_files $uri $uri/index.html;
}

in diesem Fall wird ngingx angewiesen, nach einer Datei mit dem genauen Namen zu suchen, die zuerst angegeben wurde. Wenn keine solche Datei gefunden wird, wird uri/index.html versucht. Wenn also eine Anfrage nach https://www.example.com/ kommt, würde sie zuerst nach einer genauen Datei suchen und nicht finden, dass dann nach index.html gesucht wird

39
cobaco

location / { ist der allgemeinste Ort (mit location {). Es wird alles passen, AFAIU . Ich bezweifle, dass es sinnvoll wäre, location / { index index.html; } zu haben, da für jedes Unterverzeichnis Ihrer Website viel doppelten Inhalt vorhanden ist.

Der Ansatz mit 

try_files $ uri $ uri/index.html index.html;

wie in einem Kommentar oben erwähnt, ist es schlecht, da er index.html für Seiten zurückgibt, die auf Ihrer Website nicht vorhanden sein sollten (alle möglichen $uri-Dateien enden dort) Umleitung im letzten Argument von try_files

Ihr Ansatz 

location = / {
   index index.html;

ist auch schlecht, da index auch eine interne Weiterleitung durchführt. Wenn Sie das wollen, sollten Sie in der Lage sein, dies in einem bestimmten location zu behandeln. Erstellen Sie z.

location = /index.html {

wie vorgeschlagen wurde hier . Dann haben Sie jedoch einen funktionierenden Link http://example.org/index.html, der möglicherweise nicht erwünscht ist. Eine andere Variante, die ich verwende, ist:

root /www/my-root;

# http://example.org
# = means exact location
location = / {
    try_files /index.html =404;
}

# disable http://example.org/index as a duplicate content
location = /index      { return 404; }

# This is a general location. 
# (e.g. http://example.org/contacts <- contacts.html)
location / {
    # use fastcgi or whatever you need here
    # return 404 if doesn't exist
    try_files $uri.html =404;
}

P.S. debug nginx ist extrem einfach (wenn Ihre Binärdatei dies zulässt). Fügen Sie einfach den server {-Block hinzu:

error_log /var/log/nginx/debug.log debug;

und dort alle internen Weiterleitungen usw. sehen.

27

Laut Dokumentation Überprüft das Vorhandensein von Dateien in der angegebenen Reihenfolge und verwendet die erste gefundene Datei für die Anforderungsverarbeitung. Die Verarbeitung wird im aktuellen Kontext ausgeführt. Der Pfad zu einer Datei wird anhand des Dateiparameters gemäß den Direktiven root und alias erstellt. Sie können das Vorhandensein des Verzeichnisses überprüfen, indem Sie am Ende eines Namens einen Schrägstrich angeben, z. "$ Uri /". Wenn keine der Dateien gefunden wurde, wird eine interne Weiterleitung an den im letzten Parameter angegebenen URI vorgenommen. Wichtig

eine interne Weiterleitung zu dem im letzten Parameter angegebenen URI ist gemacht.

Im letzten Parameter sollten Sie also Ihre Seite oder Ihren Code hinzufügen, wenn die ersten beiden Parameter false zurückgeben. 

location / {
  try_files $uri $uri/index.html index.html;
}
4
Nokors

Für mich führte die try_files-Direktive in der (derzeit am meisten bewerteten) Antwort https://stackoverflow.com/a/11957896/608359 dazu, Zyklen umzuschreiben,

*173 rewrite or internal redirection cycle while internally redirecting

Ich hatte mehr Glück mit der Index-Direktive. Beachten Sie, dass ich vor dem Namen einen Schrägstrich verwendet habe, der möglicherweise nicht Ihren Vorstellungen entspricht.

server {
  listen 443 ssl;
  server_name example.com;

  root /home/dclo/example;
  index /index.html;
  error_page 404 /index.html;

  # ... ssl configuration
}

In diesem Fall wollte ich, dass alle Pfade zu /index.html führen, auch wenn Sie eine 404 zurückgeben.

0
Douglas Lovell