【问题标题】:Restricting access to files and directories on Nginx by IP通过 IP 限制对 Nginx 上文件和目录的访问
【发布时间】:2014-04-24 06:06:29
【问题描述】:

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


    【解决方案1】:

    如果你修复你的上下文,它可能会解决这个问题。而不是正斜杠在你的 .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。

    也整理了一下。

    【讨论】:

    • 最后最好为 wp-admin 区域设置一个子域主机名;这是我唯一能够可靠设置的东西。就目前而言,这是可行的。
    【解决方案3】:

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

    我相信这个问题是由 Nginx 首先看到它的一个 php 文件引起的,因此在它到达 location ~ ^/(wp-admin|wp-login\.php) {} 之前在 location ~ \.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

    【讨论】:

      【解决方案4】:

      现在 (2018) Wordpress 自动将 wp-admin 重定向到 wp-login。 所以只禁止 /wp-login.php 就足够了:

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

      只需将其放在默认的“位置`.php$”块之后

      【讨论】:

        猜你喜欢
        • 2015-11-30
        • 1970-01-01
        • 2021-12-16
        • 2018-02-18
        • 1970-01-01
        • 1970-01-01
        • 2014-04-08
        • 2022-11-02
        相关资源
        最近更新 更多