1 votes

Je n'arrive pas à comprendre le problème de configuration de nginx

Je veux servir wordpress 3 multisite avec nginx, et voici ma conf nginx

server {
    listen 80;
    server_name lc.wp.com;
    index index.html;
    access_log /usr/local/var/log/nginx/lc.wp.access.log;
    error_log /usr/local/var/log/nginx/lc.wp.error.log debug;

    location / {
        root /usr/local/www/playground/php/wordpress/;
        autoindex on;
        index  index.html index.htm index.php;
        rewrite ^.*/files/(.*)$ /wp-includes/ms-files.php?file=$1 last;
        try_files $uri $uri/ @rewrite;
    }

    location @rewrite {
        rewrite ^.+?(/wp-.*) $1 last;
        rewrite ^.+/?(/.*\.php)$ $1 last;
        rewrite ^(.+)$ /index.php?q=$1 last;
    }

    location ~* ^.+\.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$
    {
        root /usr/local/www/playground/php/wordpress/;
        rewrite ^/.*(/wp-.*/.*\.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))$ $1 last;
        rewrite ^.*/files/(.*(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))$/wp-includes/ms-files.php?file=$1 last;
        expires 30d;
        break;
    }

    location ~ \.php {
        root /usr/local/www/playground/php/wordpress/;
        include /usr/local/etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }

Je crée un sous-site "sub1", puis il se passe quelque chose d'étonnant :

Si je visite l'url ci-dessous, cela fonctionne normalement.

lc.wp.com/sub1/
lc.wp.com/sub1/hello/2011/06/16

si je visite

lc.wp.com/sub1/wp-admin/post-new.php?post_type=post

le serveur me dit 404 non trouvé

curl -I http://lc.wp.com/sub1/wp-admin/post-new.php\?post_type\=post
HTTP/1.1 404 Not Found
Server: nginx/1.0.2
Date: Thu, 16 Jun 2011 10:25:11 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.3.5

si je désactive l'analyse php (partie commentaire php), et que je configure

rewrite ^.+?(/wp-.*) $1 redirect;

Le serveur 302 s'est déplacé normalement, et m'a dit de sauvegarder le fichier post-new.php.

un peu fou maintenant. T_T

2voto

h0tw1r3 Points 2706

Ce que tu as posté est vraiment désordonné. Nginx traite les directives de localisation dans un ordre spécifique, et n'en fait correspondre qu'une seule (sauf si elle est réécrite). Arrêtez de fumer un peu, effacez ce que vous avez, et essayez ceci :

server {
    listen       80;
    server_name  lc.wp.com;
    index index.php index.html;
    access_log /usr/local/var/log/nginx/lc.wp.access.log;
    error_log /usr/local/var/log/nginx/lc.wp.error.log debug;

    root /usr/local/www/playground/php/wordpress/;

    location / {
        try_files $uri $uri/ @wordpress;
    }

    location @wordpress {
        rewrite ^/([_0-9a-zA-Z-]+/)?files/(.+) /wp-includes/ms-files.php?file=$2 last;
        rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
        rewrite ^/[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) /$1 last;
        rewrite ^/[_0-9a-zA-Z-]+/(.*\.php)?$ /$1 last;
        rewrite .* /index.php last;
    }

    location ~ \.php$ {
        if (!-e $request_filename) {
            rewrite ^/[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) /$1 last;
            rewrite ^/[_0-9a-zA-Z-]+/(.*\.php)?$ /$1 last;
            rewrite .* /index.php last;
            return 404;
        }
        fastcgi_index index.php;
        fastcgi_intercept_errors on;
        fastcgi_split_path_info ^(.+\.php)(.*)$;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass 127.0.0.1:9000;

        fastcgi_param  QUERY_STRING       $query_string;
        fastcgi_param  REQUEST_METHOD     $request_method;
        fastcgi_param  CONTENT_TYPE       $content_type;
        fastcgi_param  CONTENT_LENGTH     $content_length;

        fastcgi_param  REQUEST_URI        $request_uri;
        fastcgi_param  DOCUMENT_URI       $document_uri;
        fastcgi_param  DOCUMENT_ROOT      $document_root;
        fastcgi_param  SERVER_PROTOCOL    $server_protocol;

        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

        fastcgi_param  REMOTE_ADDR        $remote_addr;
        fastcgi_param  REMOTE_PORT        $remote_port;
        fastcgi_param  SERVER_ADDR        $server_addr;
        fastcgi_param  SERVER_PORT        $server_port;
        fastcgi_param  SERVER_NAME        $server_name;
    }
}

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