Nginx客户端证书authentication:如何排除IP地址

我有Nginx运行作为一个Web服务器的代理,我想保护访问使用TLS / SSL客户端证书。

这是我的SSLconfiguration

server { listen 443 ssl; server_name www.domain.com; ssl_certificate /etc/nginx/ssl/domain/server.crt; ssl_certificate_key /etc/nginx/ssl/domain/server.key; ssl_client_certificate /etc/nginx/ssl/clients/client_ca.pem ssl_verify_client on; 

它工作得很好 – 但现在我需要允许访问我的网站没有来自一个特定IP地址的客户端证书。

有没有可能性与nginx做到这一点?

谢谢 :-)

这是我的解决scheme:

 server { listen 443 ssl; server_name www.domain.com; ssl_certificate /etc/nginx/ssl/domain/server.crt; ssl_certificate_key /etc/nginx/ssl/domain/server.key; ssl_client_certificate /etc/nginx/ssl/clients/client_ca.pem ssl_verify_client optional; # Set global proxy settings proxy_read_timeout 360; proxy_pass_header Date; proxy_pass_header Server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Accept-Encoding ""; location / { if ($remote_addr = 1.2.3.4 ) { proxy_pass http://10.10.10.1; break; } if ($ssl_client_verify != "SUCCESS") { return 403; } proxy_pass http://10.10.10.1;} error_log /var/log/nginx/domain-error.log; access_log /var/log/nginx/domain-access.log; } 

IP 1.2.3.4可以访问网站没有客户端证书:-)

简单的解决scheme是创build一个具有不同域名( ssl_verify_clientclosures)的重复server容器,以及某种forms的allow / denyscheme。

可以将ssl_verify_client optional设置ssl_verify_client optional ,然后手动validation客户端,但是无论如何您的客户端都会提示您input证书,因此可能会让您的用户烦恼。