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

时间:2014-03-18 13:50:16

标签: wordpress 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;
     }

} 

4 个答案:

答案 0 :(得分:3)

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

之前做反斜杠
location ~ ^/(wp-admin|wp-login\.php) {
            allow 123.123.123.123/32;
            deny all;
}

答案 1 :(得分: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。

整理了一下。

答案 2 :(得分: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;

}

这会阻止对wp-login.php的访问,这很好,但就像你说它没有阻止wp-admin所以只需通过添加location ~ \.php$ {}下面的其他块来跟进

location ~ ^/(wp-admin|wp-login\.php) {

    allow 12.345.6.7 #example IP address

    deny all;
}

现在,如果您不是来自IP 12.345.6.7,那么您将无法访问wp-adminwp-login.php

答案 3 :(得分:0)

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

location = /wp-login.php {
allow 16.16.12.11
deny  all;
}

将它放在默认的“location` .php $”块

之后