我正在尝试按如下方式设置 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: }
但是 Nginx 返回一个错误:
"auth_basic" directive is not allowed here in .../ssl.conf:19
在这种情况下如何设置条件?
最佳答案
您可以设置 auth_basic
if
中的配置像这样的条款:
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;
}
}
现在,如果未提供客户端证书(或验证失败),身份验证将回退到 HTTP Basic。
关于authentication - Nginx 配置 : how to use auth_basic authentication if ssl_client_certificate none provided?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23716588/