阻止对 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;
    }
}

答案1

下面的配置应该使 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;
    }

} 

相关内容