cakephp & nginx config / regras de reescrita

3

Oi alguém, por favor, me ajude, eu pedi isso em stackoverflow também, mas não tenho muita resposta e estava debatendo se era programação ou servidor relacionado.

Estou tentando configurar um ambiente cakephp em um servidor Centos executando Nginx com o Fact CGI. Eu já tenho um site wordpress rodando no servidor e um site phpmyadmin então eu tenho o PHP configurado corretamente.

Meu problema é que eu não consigo configurar a regra de reescrita correta no meu vhost para que o bolo processe as páginas corretamente, ou seja, com estilo e assim por diante. Eu pesquisei o máximo possível e o principal consenso dos sites, como o listado abaixo, é que eu preciso ter a seguinte regra de reescrita em vigor

location / {
  root /var/www/sites/somedomain.com/current;
  index index.php index.html;

  # If the file exists as a static file serve it 
  # directly without running all
  # the other rewrite tests on it
  if (-f $request_filename) { 
    break; 
  }
  if (!-f $request_filename) {
    rewrite ^/(.+)$ /index.php?url=$1 last;
    break;
  }
}

link

problema é que estes reescrevem supondo que você execute o bolo diretamente da webroot, que não é o que eu quero fazer. Eu tenho uma configuração padrão para cada site, ou seja, uma pasta por site contendo as seguintes pastas log, backup, privado e público. Público sendo onde nginx está procurando seus arquivos para servir mas eu tenho bolo instalado em privado com um link simbólico em público ligando de volta para / private / cake /

este é o meu vhost

server {
    listen 80;
    server_name app.domain.com;

    access_log /home/public_html/app.domain.com/log/access.log;
    error_log /home/public_html/app.domain.com/log/error.log;

    #configure Cake app to run in a sub-directory
    #Cake install is not in root, but elsewhere and configured
    #in APP/webroot/index.php**

    location /home/public_html/app.domain.com/private/cake {
        index index.php;

        if (!-e $request_filename) {
            rewrite ^/(.+)$ /home/public_html/app.domain.com/private/cake/$1 last;
            break;
        }

    }

    location /home/public_html/app.domain.com/private/cake/ {
        index index.php;

        if (!-e $request_filename) {
            rewrite ^/(.+)$ /home/public_html/app.domain.com/public/index.php?url=$1 last;
            break;
        }

    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /home/public_html/app.domain.com/private/cake$fastcgi_script_name;
        include        /etc/nginx/fastcgi_params;
    }

}

Agora, como eu disse, posso ver o principal index.php do cake e conectá-lo ao meu DB, mas esta página não tem estilo, então antes de continuar, gostaria de configurá-lo corretamente. O que estou fazendo errado ……….

Obrigado seanl

    
por seanl 26.06.2009 / 11:15

3 respostas

2

Para um método muito simples / limpo e funciona com o cakephp. (O que eu fiz para fazê-lo funcionar, para adicionar à coleção de configurações)

server {
    listen 80;
    server_name _;
    root /var/www/webapplication/app/webroot;

    if (-f $request_filename) {
        break;
    }
    if (!-f $request_filename) {
        rewrite ^/(.+)$ /index.php?url=$1 last;
        break;
    }

    location /favicon.ico {
        empty_gif;
    }

    location ~ .php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include /usr/nginx/conf/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /var/www/webapplication/app/webroot/index.php;
        # $fastcgi_script_name;
    }

}
    
por 29.06.2009 / 22:41
0

Seu arquivo php está sendo capturado pela localização "~ .php $" e é o único que funciona.

Isso não funcionará:

location /home/public_html/app.domain.com/private/cake/

porque você dá o caminho do sistema e você deve dar o caminho URI. O mesmo com reescrever regra. Eu vejo sua configuração como o apache :) então isso pode ser algo que você procura:

location /root_of_my_site {
   alias home/public_html/app.domain.com/...
}
    
por 26.06.2009 / 13:21
0

location /cake {
    try_files   $uri  $uri/  @cakephp;
}

location = @cakephp {
    fastcgi_param  SCRIPT_FILENAME /home/public_html/app.domain.com/private/cake/index.php;
    fastcgi_param  QUERY_STRING url=$request_uri;
    fastcgi_pass   127.0.0.1:9000;
    include        /etc/nginx/fastcgi_params;
}

Isso pressupõe que você acesse o cakephp por meio do link e tenha o nginx 0.7.x.

Se você tiver o nginx 0.6.x, use error_page 404 = @cakephp em vez de try_files .

Boa sorte!

    
por 26.06.2009 / 14:36