Eu tenho a seguinte configuração nginx para dois domínios diferentes:
server {
listen 80;
root /srv/users/serverpilot/apps/myapp/public;
index index.php index.html index.htm;
server_name domain.com www.domain.com;
location / {
try_files $uri $uri/ @route;
}
location @route {
rewrite ^/(.+)$ /index.php?_route_=$1 last;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/srv/users/serverpilot/run/myapp.php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Estou em uma gotícula DigitalOcean Ubuntu 14.04 x64 usando o ServerPilot como meu painel de controle.
O docroot padrão para aplicativos do ServerPilot é:
/srv/users/serverpilot/apps/APPNAME/public
Em um domínio, onde estou usando o docroot padrão, essa configuração do nginx funciona bem, mas no outro aplicativo, a raiz do meu documento atual é:
/srv/users/serverpilot/apps/myapp/public/public
Nisto eu mudei a diretiva raiz como apropriado, mas tudo que eu obtenho é o erro No input file specified.
.
Eu verifiquei as permissões, verifiquei minha permissão de pool e verifiquei se o arquivo existe.
Qualquer ideia ou ajuda seria apreciada.
UPDATE
Alterou a configuração para isso:
server {
listen 80;
root /srv/users/serverpilot/apps/myapp/public;
index index.php index.html index.htm;
server_name my.domain.com;
location / {
rewrite ^/$ /public/ break;
rewrite ^(.*)$ /public/$1 break;
}
location ~ .*\.(ico|gif|jpg|jpeg|png) { }
location /public {
rewrite ^/(.*)/$ /$1 redirect;
if (!-e $request_filename){
rewrite ^/([^?]*) /index.php?_route_=$1 break;
}
}
location ~ \.php$ {
try_files $uri $uri/ /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/srv/users/serverpilot/run/myapp.php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
E agora estou recebendo meu index.php como esperado, mas nenhum CSS, js ou imagens e links clicando me levam para um 404.
Então, estou chegando perto, mas ainda sinto falta de algo.
UPDATE
Do log de erros, posso ver porque as rotas estão falhando. Rotas estão sendo solicitadas com uma barra adicional aqui:
2015/04/29 11:16:06 [error] 9796#0: *7 open()
"/srv/users/serverpilot/apps/myapp/public/public//common/css&css=50d5d2cdd10873f535b8f87c3c65e908"
failed (2: No such file or directory), client: 127.0.0.1,
server: my.domain.com, request: "GET /common/css&css=50d5d2cdd10873f535b8f87c3c65e908 HTTP/1.1",
host: "my.domain.com",
referrer: "http://my.domain.com/"
E para imagens, elas não estão sendo encaminhadas pelo diretório public /:
2015/04/29 11:16:06 [error] 9796#0:
*11 open() "/srv/users/serverpilot/apps/myapp/public/image/cache/data/blog/post/landscape-b-40x30h.jpg"
failed (2: No such file or directory), client: 127.0.0.1,
server: my.domain.com, request: "GET /image/cache/data/blog/post/landscape-b-40x30h.jpg HTTP/1.1",
host: "my.domain.com", referrer: "http://my.domain.com/"
ATUALIZAÇÃO:
Depois de muita pesquisa e de outros blocos de servidores para diferentes aplicativos, eu descobri isso, mas ainda falta algo.
upstream backend {
server unix:/srv/users/serverpilot/run/myapp.php-fpm.sock;
}
server {
listen 80;
root /srv/users/serverpilot/apps/myapp/public;
index index.php index.html index.htm;
server_name my.domain.com;
access_log /srv/users/serverpilot/log/myapp/myapp_nginx.access.log;
error_log /srv/users/serverpilot/log/myapp/myapp_nginx.error.log;
location /public {
try_files $uri $uri/ /public/index.php?_route_=$args;
}
location / {
rewrite ^(.*)$ /public/$1;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass backend;
}
}
O único problema que resta é que cada página php retorna a home page.
Os links funcionam quando eles clicam neles mudam o histórico, mas a mesma página é carregada para cada solicitação.