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

问题描述 投票:4回答:4

我正在尝试使用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;
     }

} 
wordpress nginx
4个回答
3
投票

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

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

2
投票

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

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。

整理了一下。


1
投票

我知道这有点老了,但你的回答对我有所帮助,而且我已经改进了。所以对于其他人来说,我认为这个问题实际上很常见。对我来说,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


0
投票

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

wp-admin

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

© www.soinside.com 2019 - 2024. All rights reserved.