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やChrome-on-Androidなどの一部のブラウザーは、ユーザーがWebサイトのどこに行ってもクライアント証明書を提供するように要求することになります。
Nginxに、/jsonrpc
場所以外のすべての場所でクライアント証明書を受け入れますが、実際には気にしないようにするにはどうすればよいですか?
server
ブロックに配置する方法が分からない場合に、おそらく最終的に実行されることです。Apacheを使用しているときにこの問題は発生していなかったので、ここで機能する設定があればいいと思いました。