No Apache, você tem essas diretivas RewriteCond para excluir !/public e /index.php . Em Nginx, basta adicionar um location s separado para eles:
location /public {
}
location = /index.php {
}
Seu rewrite está quase lá, mas ao contrário do Apache, o substituição string no Nginx é sempre root relative (não location relative) e deve ter o primeiro / . Além disso, sugiro remover a barra entre php/? como desnecessário.
location / {
rewrite ^(.*)$ /index.php?params=$1;
}