Поэтому, чтобы помочь предотвратить атаки методом грубой силы на мою установку phpmyadmin, я настроил nginx на требование HTTP Basic Auth (дополнительное имя пользователя и пароль), а затем запросы должны поступать с IP-адреса из белого списка. Однако белый список IP-адресов работает нормально, если я запускаю https://example.com/phpmyadmin/ однако без добавления дополнительного блока .php я мог загрузить https://example.com/phpmyadmin/index.php без моего IP-адреса в белом списке. Эта проблема не влияет на базовую аутентификацию HTTP. Есть ли причина, по которой это происходит? В любом случае, чтобы обойти необходимость добавления дополнительных блоков .php? Копия области конфигурации для phpmyadmin находится ниже.
# Setup and secure phpMyAdmin
location /phpmyadmin/ {
allow 1.2.3.4;
deny all;
auth_basic "phpMyAdmin - HTTP Basic Login";
auth_basic_user_file /etc/nginx/pma_pass;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
allow 1.2.3.4;
deny all;
}
}
В большинстве конфигураций PHP есть один location ~ \.php$
блок, который обрабатывает любой URI, заканчивающийся на .php
, поэтому добавление ограничений к другим location
блоки будут влиять только на задействованные статические файлы. Видеть этот документ для большего.
Самым чистым решением является использование префикса местоположения с ^~
модификатор, который гарантирует, что все URI, начинающиеся с /phpmyadmin/
обрабатываются этим блоком, а другие locations
на верхнем уровне не обходите вашу безопасность. Видеть этот документ для большего.
Как вы обнаружили, вам нужно будет добавить вложенный location
для обработки PHP в этом блоке, но все операторы аутентификации должны быть унаследованы и не должны повторяться во внутреннем блоке.
Например:
location ^~ /phpmyadmin/ {
allow 1.2.3.4;
deny all;
auth_basic "phpMyAdmin - HTTP Basic Login";
auth_basic_user_file /etc/nginx/pma_pass;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}