过去几天我一直在处理这个问题,这让我很抓狂。我让 nginx 在 apache 前面充当反向代理。我有两个 vhost,每个都在 nginx 中设置了自己的 ssl 证书。以下是 nginx 配置的相关部分(我认为)
虚拟主机1
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;
虚拟主机2
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;
使用此配置,我每次访问 xxx.org 时都会获得正确的证书。但是,当我访问 yyy.org 时,nginx 有时使用 xxx.org 证书,有时使用正确的证书 (yyy.org)。我似乎找不到任何原因或理由来解释为什么它会选择使用错误的证书。如果我直接访问 apache 服务器而不是通过 nginx 代理,那么一切都会正常,所以我相信问题出在 nginx 的某个地方。
我在 uBuntu 10.04.4 上,并且根据 nginx -V 启用了 SNI。
SSL_SESSION_CACHE 共享是否会导致此行为?如果我绕过 nginx 并直接转到 Apache,则每次都可以正常工作