因此,为了防止对我的phpmyadmin安装的蛮力攻击,我configuration了nginx以要求HTTP基本身份validation(额外的用户名和密码),然后请求需要来自列入白名单的IP地址。 然而,IP地址白名单工作正常,如果我运行https://example.com/phpmyadmin/,但不添加额外的.php块,我可以加载https://example.com/phpmyadmin/index.php没有我的IP列入白名单。 此问题不会影响HTTP基本身份validation。 这有什么原因吗? 无论如何,以避免不得不添加额外的.php块? 下面是phpmyadmin的configuration区域的副本。
# 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; } }
在大多数PHPconfiguration中,有一个location ~ \.php$
block,它处理任何以.php
结尾的URI,因此向其他location
块添加限制只会影响涉及的静态文件。 请参阅此文档了解更多
最简洁的解决scheme是使用含有^~
修饰符的前缀位置,从而确保以/phpmyadmin/
开头的所有URI都由该块处理,并且顶层的其他locations
不会绕过您的安全性。 请参阅此文档了解更多
正如你已经发现的,你将需要添加一个嵌套的location
来处理该块内的PHP,但是authentication语句应该全部被inheritance,并且不需要在内部块中重复。
例如:
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; } }