location /
nunca é usado
O problema que você tem está relacionado à precedência de local (ênfase adicionada).
nginx first searches for the most specific prefix location given by literal strings regardless of the listed order. [...] Then nginx checks locations given by regular expression in the order listed in the configuration file. The first matching expression stops the search and nginx will use this location. If no regular expression matches a request, then nginx uses the most specific prefix location found earlier.
Assim, este bloco de localização:
location ~ \.php$ {
try_files $uri =404; # <-
Corresponde a esta solicitação:
example.com/home.php
e nenhum outro bloco de localização é relevante.
Como você já percebeu, isso significa que o nginx tentará encontrar e servir home.php
, resultando em um 404.
Use um @location para o arquivo index.php principal
Normalmente, o único arquivo php de relevância é index.php
, você pode usá-lo da seguinte forma:
try_files $uri $uri/ @joomla;
location @joomla {
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param SCRIPT_NAME $document_root/index.php;
fastcgi_param DOCUMENT_URI /index.php;
fastcgi_index index.php;
}
Use outro bloco de localização para solicitações * .php
Além de um front controller, o joomla permite / espera que outros arquivos php sejam acessados diretamente, como /administrator/index.php
. Para permitir o acesso a eles sem tentar processar arquivos php ausentes:
location ~ \.php$ {
try_files $uri @joomla;
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Isso permitirá acesso direto a outros arquivos php (o que normalmente não é bom ...) voltando a usar /index.php
, via @joomla
location, para qualquer requisição de arquivo php que não existe.
Observe que a configuração acima também é na documentação .