it-swarm.com.de

nginx-Speicherort 404 nicht gefunden

Hier sind meine Nginx-Konfigurationsdateien. 

In der default.conf wird der erste Speicherort für den Zugriff auf das Verzeichnis/usr/share/nginx/html verwendet. Es ist in Ordnung, während ich auf http://47.91.152.99 zugreife. Wenn ich jedoch einen neuen Speicherort für das Verzeichnis/usr/share/nginx/public verzeichne, bringe nginx eine 404-Seite zurück, während ich auf http://47.91.152.99/test zugreife.

Also, was ist los? Missbrauche ich die Direktive von Nginx?

/etc/nginx/nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    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;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}


/etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/Host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location ^~ /test/ {
        root /usr/share/nginx/public;
        index index.html index.htm;
    }
    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
8
user39291

Der folgende fehlerhafte Block (in Ihrem Fall);

 location ^~ /test/ {
     root /usr/share/nginx/public;
     index index.html index.htm;
 }

sagt Nginx, das Verzeichnis 'test' im Ordner (Root)/usr/share/nginx/public zu suchen. Wenn sich in diesem Stammverzeichnis kein "Test" -Ordner befindet, wird 404 zurückgegeben. Um Ihr Problem zu beheben, schlage ich vor, dass Sie versuchen, alias anstelle von root zu verwenden. So wie:

 location ^~ /test/ {
     alias /usr/share/nginx/public;
     index index.html index.htm;
 }

Nur für Kicks kann die Indexanweisung generell festgelegt werden, so dass Sie sie nicht ständig neu schreiben müssen.

 server {
     listen       80;
     server_name  localhost;

     root   /usr/share/nginx/html;
     index  index.html index.htm;

     error_page   500 502 503 504  /50x.html;

     location / { }

     location ~^/test/ {
         alias /usr/share/nginx/public;
     }

     location = /50x.html {
         root   /usr/share/nginx/html;
     }
 }

Eine Sache, die Sie auch beachten sollten: Je genauer der Standortblock, desto höher sollte er in Ihrer Konfiguration sein. Wie dieser location = /50x.html. In einer perfekten Welt würde dies direkt nach den allgemeinen Server-Blockeinstellungen eingestellt werden.

Ich hoffe es hilft.

12
OldFart

Fehler durch Root-Direktive verursacht

location ^~ /test/ {
    root /usr/share/nginx/public;
    index index.html index.htm;
}

Fix mit Alias-Direktive

 location ^~ /test/ {
     alias /usr/share/nginx/public;
     index index.html index.htm;
 }

Andere Verbesserungen

Zusätzlicher Tipp: Die Index-Direktive kann so eingestellt werden, dass Sie sie nicht erneut schreiben müssen.

server {
    listen       80;
    server_name  localhost;

    root   /usr/share/nginx/html;
    index  index.html index.htm;

    error_page   500 502 503 504  /50x.html;

    location / { }

    location ~^/test/ {
        alias /usr/share/nginx/public;
    }

    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

nginx stimmt mit Location-Blöcken überein, die teilweise auf der Position in der Konfiguration basieren. Idealerweise würden Sie das, was Sie jetzt haben, umkehren. Der Standortblock wäre in nginx config höher. Zu diesem Zweck würde sich auch location = /50x.html nach oben bewegen. Ordnung ist

  1. Genaue Übereinstimmung =
  2. Match weiterleiten ~ ~ /
  3. Groß-/Kleinschreibung regulärer Regex ~ /
  4. Groß- und Kleinschreibung der Regex ~ *
  5. Pfadübereinstimmung /

Weitere Informationen zu nginx-Standortpriorität . Außerdem können Sie die offizielle Dokumentation jederzeit einsehen. Die nginx-Dokumentation für Standortblock http://nginx.org/de/docs/http/ngx_http_core_module.html#location

2
gtzilla