nginx regras de reescrita para o framework lítio php

1

Eu tenho tentado obter lithium em execução com o Nginx sem sucesso. A estrutura de diretório de lithium é assim

lithium
  |-> app libraries .htaccess
      |-> webroot .htacess --other directories
           |-> index.php .htaccess --other files

Eu copiei a pasta lithium para o meu /var/www/ . O caminho do lítio é /var/www/lithium/

Agora eu configurei as regras de reescrita dessa maneira no meu nginx.conf

server {
        listen       80;
        server_name  localhost;
        root /var/www/;

    location /lithium {
       rewrite ^/$ /app/webroot/ break;
       rewrite ^(.*)$ /app/webroot/$1 break;
    }

    location /lithium/app {
       rewrite ^/$ /webroot/ break;
       rewrite ^(.*)$ /webroot/$1 break;
     }

    location /lithium/app/webroot {
       if (!-e $request_filename){
        rewrite ^(.*)$ /index.php?url=$1 break;
        }
     }
 ...then my php and other configurations

Mas o nginx sempre gera um erro 404 . Por que isso está acontecendo?

Eu também tentei isso

server {
            listen       80;
            server_name  localhost;
            root /var/www/;

location /lithium {
        if (!-e $request_filename) {
            rewrite ^/lithium/(.+)$ /lithium/app/webroot/$1 last;
            break;
            }
        }

        location /lithium/app/webroot {
        if (!-e $request_filename) {
            rewrite ^/lithium/app/webroot/(.+)$ /lithium/app/webroot/index.php?url=$1 last;
            break;
        }
    }
...then my php and other configurations

Mas, novamente, há um erro 404 .

Editar

Como sugerido eu alterei a raiz do meu servidor para /var/www/lithium/app/webroot , então meu nginx conf se parece com isso

server {
        listen   80;
        server_name localhost;

        root   /var/www/lithium/app/webroot;
        access_log /var/log/lithium/access.log;
        error_log /var/log/lithium/error.log warn;

        index  index.php index.html;

        try_files $uri $uri/ /index.php?$args;

        location ~ \.php$
        {
          .. ...
           ......

}

agora eu posso ver a casa de lítio, mas quando eu vou para o painel de teste de lítio que é http://localhost/test novamente mostra casa de lítio em vez do painel de teste.Quando eu uso o apache e ir para o url http://localhost/test me mostra o test dashboard . Portanto, as regras de reescrita do nginx ainda não estão completamente corretas. Mais se eu apontar root to lithium's webroot i não consigo acessar outros diretórios no meu /var/www/

EDITADO ÁGIO

Este é o meu bloco de servidores completo

server { 
    server_name  lithium;
    root   /var/www/lithium/app/webroot;
    access_log  /var/log/nginx/lith.access.log;
    error_log   /var/log/nginx/lith.error.log;

    listen       127.0.0.2:80;
    rewrite_log on;

    # rewrite rules for lithium
    location / {
            index  index.php index.html;

            try_files $uri $uri/ /index.php?url=$uri&$args;
    }


    location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            #include /etc/nginx/fastcgi_params;
            fastcgi_param SERVER_NAME $host;
    }

    location ~ /\.ht {
            deny  all;
    }
}

Estou usando o php 5.4.3. como php-fpm. Eu tentei fazer o que é mencionado no site oficial do lítio aqui mas eu não entendo essa linha

cp -f sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

qual localização é sapi se referindo a? Alguma idéia?

    
por lovesh 16.05.2012 / 03:33

4 respostas

1

Seria mais simples apontar para webroot usando root /var/www/lithium/app/webroot .

Ou você pode fazer o seguinte.

root /var/www

use try_files em vez de feio if :

index  index.php index.html;

location ~ \.php$ {
    ...
}

location lithium/app/webroot/ {
    try_files $uri $uri/ /lithium/app/webroot/index.php?$args;
}

location /lithium/app/ {
    rewrite ^/lithium/app/(.*)$ /lithium/app/webroot/$1;
}

location /lithium/ {
    rewrite ^/lithium/(.*)$ /lithium/app/webroot/$1;
}

location / {
    rewrite ^(.*)$ /lithium/app/webroot/$1;
}

Não se esqueça de proteger os outros diretórios.

    
por 16.05.2012 / 12:58
1
try_files $uri $uri/ /index.php?$args;

Você não está passando o URI para o Lithium. Você está anexando a string de consulta, que está vazia. Você provavelmente quer o seguinte:

try_files $uri $uri/ /index.php?url=$uri&$args;

Supondo que a Lithium espera ser chamada com index.php?uri=/test (que é o que sua configuração original implica).

Editar : o Wiki sobre lítio sugere o topo < href="http://wiki.nginx.org/HttpCoreModule#try_files"> try_files linha, o que implica que ele inspeciona as variáveis FastCGI para determinar a URL a ser veiculada.

    
por 19.05.2012 / 01:48
0

Acho que você não está definindo o caminho correto. Tente executar apenas uma configuração básica do nginx: link

A ativação de erros do php também pode ser útil. Erros de configuração, como configurar o caminho para as bibliotecas de lítio, não são óbvios, a menos que você tenha erros de php ligados.

    
por 16.05.2012 / 05:29
0
#include /etc/nginx/fastcgi_params;

Você não está incluindo o arquivo de configuração que define a maioria das variáveis FastCGI passadas para o PHP, então o Lithium provavelmente não é capaz de determinar qual URL está sendo solicitada. Descomente esta linha e mova-a acima da linha SCRIPT_FILENAME para que seu bloco fique assim:

location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SERVER_NAME $host;
}
    
por 19.05.2012 / 02:01