web-dev-qa-db-fra.com

La page d'accueil se charge, mais tous les liens permanents sont 404 lors de l'utilisation de nginx et PHP-FPM

J'ai essayé de résoudre un problème étrange avec ma configuration nginx, qui semble avoir cessé de fonctionner peu de temps après l'application d'une mise à niveau de backports Debian.

La page de destination de mon blog ( http://blog.balaji-dutt.name/ ) fonctionne bien, mais en cliquant sur un autre lien permanent ( Exemple 1 , Exemple 2 ) renvoie un Erreur nginx 404.

Voici ma config, qui est maintenant à peu près la config stock de le Codex :

server {
    listen 80;
    server_name blog.balaji-dutt.name;
    error_log /var/log/nginx/blog-error.log;
    access_log /var/log/nginx/blog-access.log combined;

    ## Your only path reference.
    root /var/www/wordpress;
    ## This should be in your http block and if it is, it's not needed here.
    index index.php;

    #Gzip
    include /etc/nginx/sites-available/gzip.conf;

    location / {
            # This is cool because no php is touched for static content. 
            # include the "?$args" part so non-default permalinks doesn't break when using query string
            try_files $uri $uri/ /index.php?$args;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
            deny  all;
            access_log off;
    }

    location ~ \.php$ {
            try_files $uri =404;

            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            include fastcgi_params;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            #fastcgi_intercept_errors on;
            fastcgi_pass   127.0.0.1:9010;
    }

}

C'est ce que je vois dans le journal des erreurs nginx lorsque j'essaie d'accéder à un lien permanent ( http://blog.balaji-dutt.name/about/ ):

2014/10/19 03:35:09 [error] 21698#0: *76739 "/var/www/wordpress/about/index.php" is not found (2: No such file or directory), client: 174.36.241.151, server: blog.balaji-dutt.name, request: "GET /about/ HTTP/1.1", Host: "blog.balaji-dutt.name", referrer: "http://blog.balaji-dutt.name/"

Il semblerait que nginx ne lise pas la directive location pour les fichiers .php, mais je n’ai pas pu comprendre pourquoi c’est le cas. Toute suggestion ou aide est la bienvenue!

Mise à jour 1 - 20 octobre 2014

Liste du répertoire pour l'emplacement de la racine nginx:

    # ls -la /var/www/wordpress
total 256
drwxr-xr-x  5 blog   www-data  4096 Sep 28 03:09 .
drwxr-xr-x  8 www-data www-data  4096 Jan 15  2014 ..
-rw-r--r--  1 blog   www-data   418 Sep 25  2013 index.php
-rw-r--r--  1 blog   www-data 19930 May 16 22:23 license.txt
-rw-r--r--  1 blog   www-data  1764 Oct  5 01:17 nginx.conf
-rw-r--r--  1 blog   www-data  7192 Sep 28 03:09 readme.html
-rw-r--r--  1 blog   www-data 55174 Mar 27  2014 sitemap.backup.xml
-rw-r--r--  1 blog   www-data  7125 Mar 27  2014 sitemap.backup.xml.gz
-rw-r--r--  1 blog   www-data  4951 Sep 28 03:09 wp-activate.php
drwxr-xr-x  9 blog   www-data  4096 Dec 12  2013 wp-admin
-rw-r--r--  1 blog   www-data   271 Jan  8  2012 wp-blog-header.php
-rw-r--r--  1 blog   www-data  4946 Sep 28 03:09 wp-comments-post.php
-rw-r--r--  1 blog   www-data  2746 Sep 28 03:09 wp-config-sample.php
-rw-r--r--  1 blog   www-data   237 Dec 22  2013 wp-config.php
drwxr-x---  9 blog   www-data  4096 Sep 28 03:09 wp-content
-rw-r--r--  1 blog   www-data  2956 Sep 28 03:09 wp-cron.php
drwxr-xr-x 12 blog   www-data  4096 Sep 28 03:09 wp-includes
-rw-r--r--  1 blog   www-data  2380 Oct 24  2013 wp-links-opml.php
-rw-r--r--  1 blog   www-data  2714 Sep 28 03:09 wp-load.php
-rw-r--r--  1 blog   www-data 33043 Sep 28 03:09 wp-login.php
-rw-r--r--  1 blog   www-data  8252 Sep 28 03:09 wp-mail.php
-rw-r--r--  1 blog   www-data 11115 Sep 28 03:09 wp-settings.php
-rw-r--r--  1 blog   www-data 26256 Sep 28 03:09 wp-signup.php
-rw-r--r--  1 blog   www-data  4026 Oct 24  2013 wp-trackback.php
-rw-r--r--  1 blog   www-data  3032 May 16 22:23 xmlrpc.php

Lorsque j'essaie d'accéder à l'URL ( http://blog.balaji-dutt.name/2013/481-nginx-Apache-w3-total-cache-a-bad-combination/ ), voici ce qui apparaît. dans le journal des erreurs nginx

*14 "/var/www/wordpress/2013/481-nginx-Apache-w3-total-cache-a-bad-combination/index.php" is not found (2: No such file or directory), client: 174.36.241.151, server: blog.balaji-dutt.name, request: "GET /2013/481-nginx-Apache-w3-total-cache-a-bad-combination/ HTTP/1.1", Host: "blog.balaji-dutt.name", referrer: "http://blog.balaji-dutt.name/"

Le chemin dans le journal des erreurs est déroutant, car la partie après /var/www/wordpress/ est en fait le lien permanent et je ne sais pas pourquoi elle est ajoutée à la demande.

Update 2 - Oct 25 2014 [Résolu]

Il s'avère que le fichier de configuration nginx créé par W3 Total Cache for Disk La mise en cache améliorée rompra les liens permanents, mais comme le fichier est en lecture seule sur nginx, le rechargement du site fonctionnera jusqu'à ce que vous rechargiez/redémarriez nginx. Réponse détaillée et une configuration de travail publiée dans cette réponse .

3
avggeek

Il s'avère que la configuration nginx insérée par W3 Total Cache si le mode Disk Enhanced est activé, rompra les liens permanents, mais uniquement si vous redémarrez nginx après que W3 Total Cache injecte la configuration pour le mode Disk Enhnaced.

Sur la suggestion de birgire , j’ai désactivé tous les plugins et vérifié le site, qui a commencé à fonctionner correctement. J'ai ensuite activé W3 Total Cache et surprise ! le site a continué à fonctionner correctement. Il a continué à fonctionner correctement jusqu'au redémarrage de nginx, puis le fichier nginx.conf créé par W3 Total Cache a été chargé et le site a été endommagé. La cause de ce comportement est la ligne suivante:

if ($w3tc_rewrite = 1) {
rewrite .* "/wp-content/cache/page_enhanced/$http_Host/$request_uri/_index$w3tc_rewrite$w3tc_ext" last;
}

Lorsque nginx est redémarré, la ligne ci-dessus est chargée et toutes les URL sont redirigées vers les fichiers HTML en cache dans wp-content/cache/page_enhanced. Lors du redémarrage, les fichiers HTML sont purgés et les liens deviennent 404. La solution que j'ai proposée consistait tout d'abord à modifier les autorisations sur le fichier de configuration nginx dans lequel W3 Total Cache écrit normalement afin de ne pas pouvoir être écrasé. J'ai ensuite changé la configuration ci-dessus:

location / {
    rewrite ^(.*\/)?w3tc_rewrite_test/?$ $1?w3tc_rewrite_test=1 last;
    if ($w3tc_rewrite = 1) {
        rewrite .* "/wp-content/cache/page_enhanced/$http_Host/$request_uri/_index$w3tc_rewrite$w3tc_ext" last;
    }
    try_files $uri $uri/ /index.php?$args;
} 

La configuration fait plusieurs choses - la ligne de réécriture originale est insérée dans un bloc d’emplacement de sorte que même si le fichier HTML n’est pas localisé, il retourne à un modèle de rendu index.php normal. De plus, la ligne w3tc_rewrite_test permet d'éliminer une erreur dans le tableau de bord. Je fais cela dans un fichier séparé pour centraliser ma configuration W3 TC afin qu'il y ait deux directives location \ pour mon site.

Pour plus de crédit, il s’avère que le module minify de nginx config pour W3 Total Config est également défectueux. Voici une config de travail1:

#Test Rewrites
    location ~ ^/wp-content/cache/minify/[^/]+/(w3tc.*)$ {
                   try_files $uri /wp-content/plugins/w3-total-cache/pub/minify.php?w3tc_rewrite_test=$1;
           }
#End Test Rewrites
# BEGIN W3TC Minify core
    set $w3tc_enc "";
    location ~ ^/wp-content/cache/minify/(.+/[X]+\.css)$ {
                try_files $uri /wp-content/plugins/w3-total-cache/pub/minify.php?test_file=$1;
    }
    location ~ ^/wp-content/cache/minify/(.+\.(css|js))$ {
                try_files $uri /wp-content/plugins/w3-total-cache/pub/minify.php?file=$1;
    }

# END W3TC Minify core

Etant donné que de nombreuses informations sur Wordpress/W3 Total Cache dépendent de la version, voici les informations de version pour la configuration ci-dessus: W3 Total Cache v0.9.4/Wordpress 4.0/nginx 1.6.2-2 ~ bpo70 + 1


1https://rtcamp.com/wordpress-nginx/tutorials/single-site/w3-total-cache/
2
avggeek