nginx 位置排除特定请求

nginx 位置排除特定请求

在 WordPress 管理员上,我通过在 nginx 配置中使用以下命令对 nginx 进行基本的 http 身份验证:

location ^~ /wp-login.php {
        auth_basic           "Restricted Area: WordPress";
        auth_basic_user_file /etc/nginx/wp.htpasswd;
        include /etc/nginx/fastcgi.conf;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
}

现在这个工作,但我需要添加一个排除wp-login.php?action=postpass

我从中学到文章nginx 如何选择使用哪个位置块来服务特定请求。^~用于覆盖我们可能拥有的任何规则,我认为我需要以一种存在正则表达式规则和精确规则的方式指定,这应该完成所需的工作。

这对我来说最有意义,但它不起作用:

location = /wp-login.php?action=postpass {
        include /etc/nginx/fastcgi.conf;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
}

location ~* /wp-login.php {
        auth_basic           "Restricted Area: WordPress";
        auth_basic_user_file /etc/nginx/wp.htpasswd;
        include /etc/nginx/fastcgi.conf;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
}

另外,尝试了其他随机组合,但完全没有成功。需要注意的是,当请求 URL 只是wp-login.phpURL 中的某个内容或 URL 后面的任何内容时,应该使用基本身份验证,但以下情况除外?action=postpass

请提供建议!提前致谢!

答案1

类似这样的事应该可以

set $shouldauth "Restricted Area: WordPress";
if ($arg_action ~* postpass) {
  set $shouldauth off;
}
location ~* /wp-login.php {
  auth_basic           $shouldauth;
  auth_basic_user_file /etc/nginx/wp.htpasswd;
  include /etc/nginx/fastcgi.conf;
  fastcgi_pass unix:/var/run/php5-fpm.sock;
}

相关内容