我有 Varnish 负载平衡三个前端 Rails 服务器,Nginx 充当 FastCGI 工作人员的反向代理。昨天,我们的证书过期了,我从 GoDaddy 获得了一个新证书,并安装了它。直接访问静态资源时,我看到了更新的证书,但是从“虚拟子域”访问它们时,我看到的是旧证书。我的 nginx 配置只引用了我的新链式证书,所以我想知道旧证书是如何显示的。我什至已经从目录中删除了它。
示例: https ://www212.doostang.com/javascripts/base_packaged.js?1331831461 (SSL 没有证书问题) https://asset5.doostang.com/javascripts/base_packaged.js?1331831461(正在使用旧证书!)(映射到 www212.doostang.com)
- 我已经重新加载甚至停止并重新启动了 nginx,测试了 nginx 以确保它从正确的配置中读取,并使用新的缓存文件重新启动了清漆。
当我在asset5.doostang.com 卷曲文件时,出现证书错误:
curl: (60) SSL证书问题,验证CA证书是否OK。详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败更多详细信息:http ://curl.haxx.se/docs/sslcerts.html
curl 默认使用证书颁发机构 (CA) 公钥(CA 证书)的“捆绑”执行 SSL 证书验证。如果默认捆绑文件不够用,您可以使用 --cacert 选项指定备用文件。如果此 HTTPS 服务器使用捆绑包中表示的 CA 签名的证书,则证书验证可能由于证书问题而失败(证书可能已过期,或者名称可能与 URL 中的域名不匹配)。如果您想关闭 curl 对证书的验证,请使用 -k(或 --insecure)选项。
当我添加 -k 选项时,我得到了请求的文件,我可以在我的 nginx 访问日志中看到它。当我不提供 -k 时,我没有收到 nginx 错误;nginx 对证书错误保持沉默。
10.99.110.27 - - [20/Apr/2012:18:02:52 -0700] "GET /javascripts/base_packaged.js?1331831461 HTTP/1.0" 200 5740 "-" "curl/7.21.3 (x86_64-pc- linux-gnu) libcurl/7.21.3 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18"
我把我认为是 nginx 配置的相关部分放在下面:
server {
# port to listen on. Can also be set to an IP:PORT
listen 443;
server_name www.doostang.com, *.doostang.com;
passenger_enabled on;
rails_env production;
ssl on;
ssl_certificate /.../doostang_combined.crt;
ssl_certificate_key /.../doostang.com.key;
ssl_protocols SSLv3;
# doc root
root /.../public/files;
if ($host = 'doostang.com' ) {
rewrite ^/(.*)$ https://www.doostang.com/$1 permanent;
}
}
# Catchall redirect
server {
# port to listen on. Can also be set to an IP:PORT
listen 443;
ssl on;
ssl_certificate /.../doostang_combined.crt;
ssl_certificate_key /.../doostang.com.key;
rewrite ^(.*)$ https://www.doostang.com$1;
}