过去几天我一直在处理这个问题,这让我感到非常紧张。 我有nginx作为一个反向代理在Apache的前面。 我有两个虚拟主机,每个虚拟主机在nginx中都有自己的SSL证书。 这里是nginxconfiguration的相关部分(我认为)
VHOST1
listen 443; server_name *.xxx.org xxx.org 64.58.248.26; access_log /var/log/nginx/xxx-ssl.access.log; error_log /var/log/nginx/xxx-ssl.error.log; ssl on; ssl_certificate /etc/nginx/ssl/xxx.org.pem; ssl_certificate_key /etc/nginx/ssl/xxx.key; ssl_session_cache shared:SSL:15m; ssl_session_timeout 15m;
VHOST2
listen 443; server_name *.yyy.org yyy.org; access_log /var/log/nginx/yyy-ssl.access.log; error_log /var/log/nginx/yyy-ssl.error.log; ssl on; ssl_certificate /etc/nginx/ssl/yyy.org.pem; ssl_certificate_key /etc/nginx/ssl/yyy.key; ssl_session_cache shared:SSL:15m; ssl_session_timeout 15m;
有了这个configuration,当我访问它时,我总是得到xxx.org的正确证书。 但是,当我去yyy.org有时nginx使用xxx.org证书,有时它使用正确的(yyy.org)。 我似乎找不到任何押韵的原因,为什么它select使用错误的证书。 如果我直接点击apache服务器而不是通过nginx代理,所有的工作都在工作,所以我相信问题在于nginx的某处。
我在uBuntu 10.04.4上,根据nginx -V启用SNI。
SSL_SESSION_CACHE被共享会导致这种行为? 如果我绕过nginx并直接去Apache,这每次都可以正常工作