web-dev-qa-db-fra.com

lieu nginx 404 non trouvé

Voici mes fichiers de configuration nginx. 

Sur le default.conf, le premier emplacement est utilisé pour accéder au répertoire/usr/share/nginx/html, il est ok tant que j'accède à http://47.91.152.99 . Mais lorsque j'ajoute un nouvel emplacement au répertoire/usr/share/nginx/public, nginx me renvoie une page 404 pendant que j'accède à http://47.91.152.99/test .

Alors, quel est le problème? Est-ce que je abuse de la directive de 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

Le bloc erroné suivant (dans votre cas);

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

indique à nginx de rechercher le répertoire 'test' dans le dossier (racine)/usr/share/nginx/public. S'il n'y a pas de dossier 'test' dans cette racine, il retournera 404. Pour répondre à votre problème, je vous suggère d'essayer d'utiliser alias au lieu de root . Ainsi:

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

En outre, la directive index peut être définie de manière générale pour que vous n'ayez pas à la réécrire tout le temps ... comme ça;

 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;
     }
 }

Une chose que vous devriez également considérer: plus le bloc d’emplacement est «précis», plus il doit résider dans votre configuration. Comme ça location = /50x.html. Dans un monde parfait, cela serait configuré en haut, juste après les paramètres de blocage généraux du serveur.

J'espère que ça aide.

12
OldFart

Erreur causée par la directive racine

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

Correction avec directive alias

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

Autres améliorations

Conseil supplémentaire: la directive index peut être définie de sorte que vous n’ayez pas à la réécrire.

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 correspond aux blocs d’emplacement en partie basés sur la position dans la configuration. Idéalement, vous inverseriez ce que vous avez maintenant. Le bloc d'emplacement serait plus élevé dans nginx config. À cette fin, l'emplacement = /50x.html serait également déplacé vers le haut. L'ordre est

  1. Match exact =
  2. Match vers l'avant ^ ~ /
  3. Expression rationnelle sensible à la casse ~ /
  4. Regex insensible à la casse ~ *
  5. Correspondance de chemin /

En savoir plus sur nginx location location . En outre, vous pouvez toujours consulter la documentation officielle. La documentation nginx relative au bloc location http://nginx.org/en/docs/http/ngx_http_core_module.html#location

2
gtzilla