如何在 nginx 上通过 IP 地址限制对 wp-login.php 的访问

如何在 nginx 上通过 IP 地址限制对 wp-login.php 的访问

我在 nginx 1.8.1 上运行的 wp 网站具有以下配置 location ^~ /wp-login.php { allow 10.0.0.0/24; deny all; }

location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
}

当我打开http://example.com/wp-login.php从我的 LAN,它下载 php 文件而不是将其传递给 fastcgi。之后,我在 wp-login.php 位置内添加了所有 fastcgi 行,它开始工作了。

location ^~ /wp-login.php {
        allow 10.0.0.0/24;
        deny all;
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
}

但这是唯一的方法吗? 我可以在 nginx 上按特定模式传递顺序吗?

提前致谢。

答案1

一旦 nginx 选择了一个位置块来处理请求,它通常会停留在该位置块内。只有当存在某种内部重定向(即,您rewrite对 URI执行try_filesindexerror_page)时,才会重新评估请求,并且最终可能会使用不同的位置来处理请求。

您不应该尝试编写配置来通过多个位置块传递请求,而应该考虑使用保存include在其他文件中的配置片段,以便多个位置之间共享的配置可以保存在单个文件中 - 它更简单,在重复配置方面节省同样的精力,并且比重定向表现更好。

相关内容