Hy, eu tive exatamente a mesma pergunta. E resolvido, yay!
Apenas tente isto:
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# /checkout/ or /checkout - just try it out
if ($request_uri = '/checkout') {
# using php-fpm
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
# using hhvm
fastcgi_pass unix:/var/run/hhvm/hhvm.sock;
}
Importante: seja muito específico com o $ request_uri
Eu acho que o seu problema foi que você também tinha na sua configuração:
location / {
try_files some_url /index.php?$args;
}
Eu acho que (bem, eu sou novo no nginx) nginx faz o seguinte:
- procurando local
/checkout
- correspondendo ao
location /checkout
-block - não é possível encontrar o script fastcgi
/checkout
- significa que nunca aplicou
try_files
com o/index.php?$args
reescrever
- significa que nunca aplicou
Pensamentos adicionais:
Para melhor confiabilidade, uso para a rota hhvm fastcgi_pass php;
e no http-block:
upstream php {
server unix:/var/run/hhvm/hhvm.sock; # hhvm
server unix:/var/run/php5-fpm.sock backup; # php-fpm
}
Com essa configuração, eu tenho um fallback se o hhvm travar.
Além disso, deve haver uma maneira melhor de alternar com base em $ request_uri ...