我们使用Nginx作为Web应用程序服务器的反向代理。Nginx处理我们的SSL等,但否则仅充当反向代理。
我们想要要求有效的客户证书,/jsonrpc
但在其他任何地方都不需要。我们发现的最好方法是
server {
listen *:443 ssl;
ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_client_certificate /etc/nginx/client-ca.crt;
ssl_verify_client optional;
location /jsonrpc {
if ($ssl_client_verify != "SUCCESS") { return 403; }
proxy_pass http://localhost:8282/jsonrpc-api;
proxy_read_timeout 90;
proxy_redirect http://localhost/ $scheme://$host:$server_port/;
}
}
这对于大多数浏览器都可以正常工作,但是某些浏览器(例如Safari和Android上的Chrome浏览器)最终会提示用户提供客户端证书,无论它们在网站上的哪个位置。
我们如何让Nginx接受但并不真正在乎我们/jsonrpc
所在地以外的所有地方的客户证书?
server
一块中的方法,那么我们可能最终会这样做。使用Apache时,我们没有遇到过同样的问题,所以我希望有一些设置可以在这里工作。