Мы используем Nginx в качестве обратного прокси-сервера для нашего сервера веб-приложений. 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 и Chrome-на-Android, в конечном итоге предлагают пользователю предоставить сертификат клиента независимо от того, где он находится на веб-сайте.
Как заставить Nginx принимать, но не заботиться о сертификате клиента везде, кроме нашего /jsonrpc
местоположения?
server
блок. У нас не было такой же проблемы при использовании Apache, поэтому я надеялся, что есть некоторые настройки, которые будут работать здесь.