Supondo que quaisquer arquivos de recursos não sejam relativos ao mesmo caminho, sua abordagem é adequada, exceto por alguns problemas.
O SCRIPT_FILENAME
precisa apontar para o arquivo de script a ser executado (por exemplo, utility.php). O valor para $fastcgi_script_name
é inadequado neste caso, pois será derivado do URI.
Além disso, fastcgi_param
declarações devem ser colocadas após include fastcgi_params;
, pois o último pode conter declarações conflitantes.
Por exemplo:
location ^~ /api {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /path/to/api.php;
fastcgi_pass 127.0.0.1:9000;
}
location ^~ /utility {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /path/to/utility.php;
fastcgi_pass 127.0.0.1:9000;
}
location ^~ /admin {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /path/to/admin.php;
fastcgi_pass 127.0.0.1:9000;
}
Obviamente, você poderia continuar a construir o SCRIPT_FILENAME
usando a variável $document_root
como um prefixo, mas isso parece sem sentido para mim por um valor com fio.
O REQUEST_METHOD
deve ser definido no arquivo fastcgi_params
.
EDITAR:
BTW, I want to do something like remove the "api" prefix and send to php. Like "/api/customer/1" -> will send "customer/1" only to php.
Você precisará identificar qual parâmetro seu script usa para ler o URI, mas será uma das variáveis listadas no arquivo fastcgi_params
(por exemplo, REQUEST_URI
).
Você pode alterar a instrução location
para uma expressão regular e capturar a parte do URI em que está interessado, por exemplo:
location ~ ^/api(?<name>.*)$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /path/to/api.php;
fastcgi_param REQUEST_URI $name$is_args$args;
fastcgi_pass 127.0.0.1:9000;
}
Certifique-se de colocar o bloco acima de quaisquer blocos de expressões regulares conflitantes, pois a expressão regular location
blocks é avaliada em ordem.