Nenhum arquivo de entrada especificado com o Docroot aninhado

1

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.

    
por Vince Kronlein 29.04.2015 / 05:32

1 resposta

0
upstream myapp {
    server unix:/srv/users/serverpilot/run/myapp.php-fpm.sock;
}

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

    root /srv/users/serverpilot/apps/myapp/public;
    index index.php index.html index.htm;

    access_log /srv/users/serverpilot/log/myapp/myapp_nginx.access.log;
    error_log  /srv/users/serverpilot/log/myapp/myapp_nginx.error.log;

    location /asset {
        rewrite ^/asset/(.*)$ /public/asset/$1 break;
    }

    location /image {
        rewrite ^/image/(.*)$ /public/image/$1 break;
    }

    location / {
        try_files $uri $uri/ @front;
    }

    location @front {
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }

    location ~ \.php$ {
        include fastcgi.conf;
        fastcgi_pass myapp;
    }
}

Obrigado por nada.

    
por 30.04.2015 / 09:05

Tags