Usamos o Nginx como um proxy reverso para nosso servidor de aplicativos da web. O Nginx lida com nosso SSL e outros, mas apenas age como um proxy reverso.
Queremos exigir um certificado de cliente válido para solicitações, /jsonrpc
mas não em nenhum outro lugar. A melhor maneira que encontramos é
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/;
}
}
Isso funciona bem para a maioria dos navegadores, mas alguns navegadores, como o Safari e o Chrome no Android, acabam solicitando que o usuário forneça um certificado de cliente, independentemente do local do site.
Como fazemos com que o Nginx aceite, mas realmente não se importe com um certificado de cliente em qualquer lugar, exceto em nossa /jsonrpc
localização?
server
bloco. Não tivemos esse mesmo problema ao usar o Apache, então eu esperava que houvesse alguma configuração que funcionasse aqui.