Não consigo descobrir o problema de configuração do nginx

1

Eu quero servir wordpress 3 multisite com nginx, e este é meu 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;
    }

Eu crio um subsite "sub1", então acontece uma incrível:

se eu visitar o URL abaixo, ele funcionará normalmente

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

se eu visitar

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

o servidor me disse que 404 não foi encontrado

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

se eu desabilitar o php parse (comentário parte php), e defina

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

o servidor 302 moveu-se normalmente e me disse para salvar o arquivo post-new.php.

um pouco louco agora. T_T

    
por limboy 16.06.2011 / 12:29

1 resposta

2

O que você postou é realmente confuso. O Nginx processa diretivas de localização em uma ordem específica e corresponde apenas a uma (a menos que seja reescrito). Pare um pouco, apague o que você tem e tente isto:

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;
    }
}
    
por 17.06.2011 / 00:43

Tags