Nginx
阻止訪問 Nginx 上的文件或位置
我們幾週前才開始執行 nginx,需要阻止對某些文件/位置的訪問。例如:
/wordpress/wp-admin/ /wp-admin/ /test/wp-admin/ /hudson/login /phpmyadmin/index.php /mysql/index.php /myadmin/index.php /wp-cron.php /xmlrpc.php
一般來說,我們希望阻止除 /index.php 之外的任何文件請求以及 /wp-admin/、/test/wp-admin/、/wordpress/wp-admin/ 等任何位置。這些文件/位置不’不存在,因此任何訪問它們的人都試圖破解/濫用系統。
在 Apache 中,我們會使用
.htaccess
來阻止此類。如何在 Nginx 中進行阻塞?目前配置
server { listen 80; root /home/public_html; index index.php; server_name domain.com; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } }
下面的配置應該導致 nginx 以 404 狀態和基本的 nginx,404 頁面響應“濫用”URL;所有其他以結尾的 URL 都
.php
應該像往常一樣被代理傳遞給 application/php 引擎。我已經測試了一些模式,但是您應該測試您希望由 nginx 而不是應用程序管理的所有模式。我認為此配置可能在 URL 上存在一些問題,例如代理傳遞位置/phpmyadmin/index.php
的\.php
正則表達式具有更高優先級的位置,但我的測試表明它至少對我來說是有效的。另外,是的,如果沒有那麼多位置塊會更好,但我想不出你將如何實現這一點。
server { listen 80; root /home/public_html; index index.php; server_name domain.com; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } # The ^~ means if this prefix pattern matches use this location block # and don't continue onto the regex location blocks - which would load # the laravel application location ^~ /wordpress/wp-admin/ { return 404; } location ^~ /wp-admin/ { return 404; } location ^~ /test/wp-admin/ { return 404; } location ^~ /hudson/login { return 404; } location ^~ /phpmyadmin/index.php { return 404; } location ^~ /mysql/index.php { return 404; } location ^~ /myadmin/index.php { return 404; } location ^~ /wp-cron.php { return 404; } location ^~ /xmlrpc.php { return 404; } }