Лучше использовать переменную $server_name, но все равно, если вам нужно обращения по любым url обрабатывать только через index.php, то правильно это делается так:
/NONEXISTENTFILE меняете на заранее фейковый файл который не может существовать, например /d7sdhsdhsdf8sfhgsfd8fh438dfjh
location ~* ^/json\.php$ {
if ($denied) {
return 403;
}
try_files /NONEXISTENTFILE @json;
}
Очень странная логика, особенно использование $host и некорректное использование try_files.
Все запретить, и разрешать конкретное - это не концепция я iptables, а общая концепция обеспечения безопасности. Вы же предлагаете все запросы отправлять в PHP. Дыры в безопасности большего масштаба придумать нельзя.
За geo модуль спасибо, phpmyadmin наверное действительно стоит перенести в другой виртуальный хост, но не ради безопасности, а для удобства. Ибо то что он на другом хосте лежит - защитит только от клиентских атак типа XSS и т.п., при фактической дыре в самом коде phpmyadmin - будет полный доступ к любым файлам с того же экземпляра php-fpm, вне зависимости от хоста. Для защиты от уязвимостей phpmyadmin нужен отдельный экземпляр fpm.