A solução ideal envolve suporte do aplicativo, pois deve entender em que caminho está sendo executado. Isso permite que ele selecione o recurso correto a ser exibido e retorne os links e redirecionamentos corretos. Neste caso, a configuração do nginx seria algo como isto:
location / {
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
i.e. simplesmente passe tudo [0] até um script PHP específico. Isso pode realmente funcionar com o Zend (eu mesmo não usei).
Se o aplicativo não puder ser modificado para entender isso, as coisas ficarão confusas com a reconfiguração de caminhos e a modificação do conteúdo. O problema com a reescrita é garantir que o caminho reescrito não seja reescrito novamente. O seguinte irá reescrever caminhos para /index.php e passá-los para o Zend.
location ~ \.php(/|$) {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
}
location / {
rewrite ^/(.*)$ /index.php/$1;
}
Se isso não funcionar, provavelmente é porque o Zend não está manipulando a solicitação corretamente - verifique os logs para ver o caminho que está tentando localizar.
Isso não causará links retornados em HTML ou redirecionamentos enviados pelo Zend para usar o caminho sem "index.php", e o nginx não parece ter um mecanismo para modificá-los. Verifique se o Zend tem uma maneira de configurar o caminho da raiz para links e redirecionamentos.
[0] Você obviamente deseja veicular conteúdo estático diretamente, omiti isso.