localização da nginx 404 não encontrada

Aqui estão os meus ficheiros nginx configure.

por omissão.conf, a primeira localização é usada para aceder à pasta/usr/share/nginx / html; está tudo bem enquanto eu acedo http://47.91.152.99 . Mas quando adiciono uma nova localização para directory / usr / share/nginx/ public directory, nginx devolve-me uma página 404 enquanto acedo http://47.91.152.99/test .

Então, o que se passa? Estou a abusar da Directiva 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;
    }
}
Author: Paulo Boaventura, 2016-12-12

4 answers

O seguinte bloco errado (no seu caso);

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

Está a dizer ao nginx para procurar a pasta 'test' na pasta (root) /usr/share/nginx/public. Se não houver nenhuma pasta de 'teste' nessa raiz, ela retornará 404. Para paliar o seu problema, sugiro que tente usar pseudónimo em vez de raiz. Assim:

 location ^~ /test/ {
     alias /usr/share/nginx/public;
     index index.html index.htm;
 }
Além disso, só por gozo, a Directiva do Índice pode ser definida de uma forma geral, para que não tenha de reescrevê-la o tempo todo... assim.
 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;
     }
 }
Uma coisa. também devias considerar... quanto mais' preciso ' o bloco de localização, mais alto em sua configuração ele deve residir. Assim. Em um mundo perfeito, isso seria configurado no topo, logo após a configuração geral do bloco do servidor. Espero que ajude.
 26
Author: OldFart, 2016-12-12 12:59:50

Erro causado pela Directiva root

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

Fix with alias directive

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

Outras Melhorias

Dica Extra: a Directiva do Índice pode ser definida para que não seja preciso reescrevê-la.
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;
    }
}

A Nginx corresponde a blocos de localização parcialmente baseados na posição na configuração. Idealmente, invertes o que tens agora. O bloco de localização seria maior na configuração nginx. Para o efeito, a localização = /50x.html também subiria. A ordem é

  1. EXACTO. match =
  2. jogo para a frente ^ ~ /
  3. regex sensível à capitalização ~ /
  4. Regex insensível à capitalização ~ *
  5. Path match /

Mais sobre a prioridade de localização da nginx . Além disso, você pode sempre rever a documentação oficial. A documentação da nginx para o bloco de localização http://nginx.org/en/docs/http/ngx_http_core_module.html#location

 7
Author: gtzilla, 2018-11-11 09:11:02

Quando o seu aplicativo é vuejs,você precisa escrever assim, pode prevenir 404, preste atenção ao double / test /

   location ^~/test/ {
       alias /usr/local/soft/vuejs/;
       try_files $uri $uri/ /test/index.html;
    }
 1
Author: yongfa365, 2020-06-22 13:36:41

No meu caso, se você está hospedando vários sites verificar {[[0]} pode ser apontado erradamente. Veja isso também.

 0
Author: The Keeper, 2019-12-12 06:54:27