5 votes

Nginx - 301 déplacé de manière permanente "problème".

En tant que noob de Nginx, j'ai un problème que je n'arrive pas à résoudre. Dans la configuration du site web de Nginx, j'ai :

server {
       listen 443;
       listen [::]:443;

       ssl on;
       ssl_certificate /etc/letsencrypt/live/website.eu/fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live/website.eu/privkey.pem;

       server_name website.eu www.website.eu;
       index index.html index.htm index.php;
       root /var/www/website;

       location / {
                  try_files $uri $uri/ =404;
       }

       location /pihole {
                        alias /var/www/html;
                        try_files $uri $uri/ /admin/index.php?$query_string;
       }

       location ~ \.php$ {
                         include snippets/fastcgi-php.conf;
                         fastcgi_pass unix:/run/php/php7.2-fpm.sock;
       }
}

Le site web fonctionne, mais le Pihole a été installé en /var/www/html dossier. Si j'essaie d'y accéder, j'obtiens :

  user@website:~$ curl -i https://www.website.eu/pihole
    HTTP/1.1 301 Moved Permanently
    Server: nginx/1.14.0 (Ubuntu)
    Date: Fri, 01 Nov 2019 11:29:13 GMT
    Content-Type: text/html
    Content-Length: 194
    Location: https://www.website.eu/pihole/
    Connection: keep-alive

Une idée de ce qui ne va pas ?

3voto

heemayl Points 85741

Vérifions :

  • votre configuration actuelle try_files directive :

    try_files $uri $uri/ /admin/index.php?$query_string;
  • index directive :

    index index.html index.htm index.php;
  • le chemin de l'URL demandé est /pihole qui correspond à location /pihole qui à son tour est aliasé :

    alias /var/www/html

Ok, donc quand vous demandez /pihole ( $uri ), nginx fera séquentiellement :

  • vérifier $uri d'abord, mais il ne peut pas correspondre à cela car /pihole est aligné sur un emplacement de sorte qu'aucun fichier ne peut pas être trouvé.

  • passer à $uri/ ensuite (ce qui provoque la redirection 301) ; ainsi, après avoir résolu le problème du alias le chemin final du système de fichiers devient /var/www/website/ et essaie ensuite de voir s'il y a un fichier référencé par index dans ce répertoire, donc essaie index.html , index.htm , index.php séquentiellement ici -- le premier trouvé gagne et une réponse est envoyée.

  • Si la deuxième étape échoue, on passe à la dernière, c'est-à-dire à l'étape suivante. /admin/index.php?$query_string -- il s'agit d'un chemin d'accès absolu, ce qui permet d'établir une correspondance avec le serveur. root . Ainsi, le chemin final devient : /var/www/website/admin/index.php?$query_string comme le root est défini comme /var/www/website . Si un fichier /var/www/website/admin/index.php est trouvé, on lui transmet le query_string et la réponse qui en résulte est envoyée.

  • Si rien ne correspond, un 404 est éventuellement envoyé.

Comme je l'ai mentionné précédemment, dans votre cas, le deuxième ( $uri/ ) est à l'origine de la redirection 301 que vous constatez. Pendant que nous y sommes, en cas de redirection, vérifiez toujours l'adresse de l'utilisateur. Location pour connaître l'URL redirigée :

Location: https://www.website.eu/pihole/ 

Maintenant, une bonne pratique lors de l'utilisation location c'est d'utiliser la terminaison / à moins que vous ne fassiez une correspondance générique ou non. Donc, par exemple, location /pihole correspond à /pihole , /piholefoo , /piholebar et ainsi de suite. Mais ce n'est probablement pas ce que vous voulez. Vous devez donc être précis dans ce cas :

location /pihole/ {
    # Note trailing / here as well
    alias /var/www/html/;
    try_files $uri $uri/ /admin/index.php?$query_string;
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X