Nginx配置:如果没有提供ssl_client_certificate,如何使用auth_basic身份验证?

Pav*_* A. 11 authentication drupal config nginx

我正在尝试按如下方式设置Nginx服务器:

首先,服务器应检查用户是否提供客户端SSL证书(通过ssl_client_certificate).如果提供了SSL证书,则允许访问该站点,

如果未提供SSL证书,请要求用户输入密码并通过auth_basic登录.

我可以配置两个身份验证方法在同一时间.但这个配置是多余的.

要检查,用户是否提供其SSL证书,我尝试这样的配置:

18:    if ($ssl_client_verify != SUCCESS) {
19:        auth_basic "Please login";
20:        auth_basic_user_file .passfile;
21:    }
Run Code Online (Sandbox Code Playgroud)

但Nginx返回错误:

这里不允许使用"auth_basic"指令.../ssl.conf:19

在这种情况下如何设置条件?

And*_*ber 12

您可以auth_basicif子句中设置配置,如下所示:

server {
    listen 443;
    auth_basic_user_file    .htpasswd;
    ssl_client_certificate  ca.cert;
    ssl_verify_client       optional;
    ...

    location / {
      ...

      if ($ssl_client_verify = SUCCESS) {
        set $auth_basic off;
      }
      if ($ssl_client_verify != SUCCESS) {
        set $auth_basic Restricted;
      }

      auth_basic $auth_basic;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果没有提供客户端证书(或验证失败),身份验证将回退到HTTP Basic.