通过IP限制对Nginx上的文件和目录的访问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过IP限制对Nginx上的文件和目录的访问相关的知识,希望对你有一定的参考价值。

我正在尝试使用nginx上的IP限制来锁定对WP-admin的访问。以下似乎阻止wp-admin,但不阻止wp-login.php

这是一个开始,因为它将阻止任何人能够从任何其他IP登录,因为登录后您被重定向到受限制的wp-admin。但是,它们仍然可以进入标志形式,理论上仍然可能受到暴力攻击的影响。

server {
    listen       80;
    server_name  website.com www.website.com dev.website.com;

    location / {
        root           /var/www/html/website.com/;
         index  index.php index.html index.htm;
         try_files $uri $uri/ /index.php?$args;
    }
     location ~ .php$ {
         root           /var/www/html/website.com/;
         fastcgi_pass   127.0.0.1:9000;
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         include        fastcgi_params;
     }
     location ~ ^/(wp-admin|wp-login/.php) {
         root           /var/www/html/website.com/;
         index          index.php index.html index.htm;
         allow             123.123.123.123/32;
         deny all;
     }

} 
答案

如果您修复了上下文,则可能会解决此问题。而不是正斜杠在.php之前做反斜杠

location ~ ^/(wp-admin|wp-login.php) {
            allow 123.123.123.123/32;
            deny all;
}
另一答案

不是一个完美的解决方案,但我现在正在使用它:

server {
    listen       80;
    server_name  website.com www.website.com dev.website.com;
    root         /var/www/html/website.com/;
    error_page 403 404 500 502 503 504 = /server_error.php;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php?$args;
    }
     location = /wp-login.php {
         allow          123.123.123.123/32;
         deny all;
         fastcgi_pass   127.0.0.1:9000;
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         include        fastcgi_params;
     }
     location ~ .php$ {
         fastcgi_pass   127.0.0.1:9000;
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         include        fastcgi_params;
     }

} 

这将使每个人都出局,但不会掩盖wp-admin存在的事实。如果有人要导航到wp-admin,他们会被重定向到受限制的wp-login.php。

整理了一下。

另一答案

我知道这有点老了,但你的回答对我有所帮助,而且我已经改进了。所以对于其他人来说,我认为这个问题实际上很常见。对我来说,Nginx只是阻止CSS文件。

我相信这个问题是由Nginx首次看到它的一个php文件引起的,因此在它到达location ~ .php$ {}之前在location ~ ^/(wp-admin|wp-login.php) {}中处理它

所以我这样做了,首先在location ~ .php$ {}上面添加:

location = /wp-login.php{

    allow 12.345.6.7; #example IP address

    deny all;

    fastcgi_index index.php;
    include fastcgi_params;

}

这将阻止访问qazxsw poi这是伟大的,但就像你说它不会阻止qazxsw poi所以只需跟进添加wp-login.php下面的其他块

wp-admin

现在,如果你不是来自IP location ~ .php$ {}那么你就无法访问location ~ ^/(wp-admin|wp-login.php) { allow 12.345.6.7 #example IP address deny all; } 12.345.6.7

另一答案

现在(2018年)Wordpress将wp-admin自动重定向到wp-login。因此,仅仅禁用/wp-login.php就足够了:

wp-admin

只需将它放在默认的“location` .php $”块之后

以上是关于通过IP限制对Nginx上的文件和目录的访问的主要内容,如果未能解决你的问题,请参考以下文章

nginx 限制目录访问为403,允许其它访问ip访问怎么变成404

Ubuntu 14 + Nginx + PHPMyAdmin:如何通过 IP 地址限制访问?

Nginx限制ip访问

.htaccess:如何通过 IP 限制对单个文件的访问?

nginx设置不能直接访问文件夹

Nginx 上的 Vaultwarden 可以通过 IP 地址访问,但不能通过域名访问