Nginx

阻止訪問 Nginx 上的文件或位置

  • April 30, 2018

我們幾週前才開始執行 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;
   }

} 

引用自:https://unix.stackexchange.com/questions/363346