Consegui fazer isso funcionar há um tempo, mas ao retornar ao projeto cakephp que comecei, parece que quaisquer alterações que fiz no nginx recentemente (ou talvez uma atualização recente) quebraram minhas regras de reescrita.
Atualmente tenho:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.php index.html index.htm;
}
location /basic_cake/ {
index index.php;
if (-f $request_filename) {
break;
}
if (!-f $request_filename) {
rewrite ^/basic_cake/(.+)$ /basic_cake/index.php?url=$1 last;
break;
}
}
location /cake_test/ {
index index.php;
if (-f $request_filename) {
break;
}
if (!-f $request_filename) {
rewrite ^/cake_test/(.+)$ /cake_test/index.php?url=$1 last;
break;
}
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 8081;
server_name localhost;
root /srv/http/html/xsp;
location / {
index index.html index.htm index.aspx default.aspx;
}
location ~ \.(aspx|asmx|ashx|asax|ascx|soap|rem|axd|cs|config|dll)$ {
fastcgi_pass 127.0.0.1:9001;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
O problema que tenho é que o css e as imagens não carregam do webroot. Em vez disso, se eu visitarhttp://localhost/basic_cake/css/cake.generic.css, recebo uma página que me diz:
CakePHP: o framework php de rápido desenvolvimento Missing Controller
Erro: CssController não foi encontrado.
Erro: Crie a classe CssController abaixo no arquivo: app/controllers/css_controller.php
Aviso: Se você deseja personalizar esta mensagem de erro, crie app/views/errors/missing_controller.ctp CakePHP: o framework php de desenvolvimento rápido
Alguém tem alguma idéia de como consertar isso?
Responder1
Acabei usando uma solução alternativa. Instalei o Apache e usei uma diretiva proxy_pass nginx para enviar o tráfego de pastas específicas para o Apache.
Responder2
Eu acho que o problema são suas regras de reescrita, deveria ficar assim
location / {
root /home/public_html/sub.example.com/cake/app/webroot;
index index.php;
if (-f $request_filename) {
break;
}
if (!-f $request_filename) {
rewrite ^/(.+)$ /index.php?url=$1 last;
break;
}
}
eu tive um problema semelhante e que foi resolvido através desteregras de configuração/reescrita do cakephp e nginx