我有Varnish负载均衡三个前端Rails服务器,Nginx充当FastCGI工作者的反向代理。昨天,我们的证书过期了,我从GoDaddy获得了一个新证书,并安装了它。当直接访问静态资源时,我看到更新的证书,但是当从“虚拟子域”访问它们时,我看到旧证书。我的nginx配置只引用了我的新链接证书,所以我想知道如何显示旧证书。我甚至从目录中删除它。Varnish/Nginx缓存SSL证书神秘
例如: https://www212.doostang.com/javascripts/base_packaged.js?1331831461(没有证书问题SSL) https://asset5.doostang.com/javascripts/base_packaged.js?1331831461(!旧的证书被使用)(映射到www212.doostang.com)
- 我重新加载,甚至停止和-restarted nginx,测试nginx以确保它从正确的配置中读取,并用新的缓存文件重新开始清漆。
当我蜷缩在asset5.doostang.com文件我得到一个证书错误:
卷曲:(60)SSL证书的问题,验证该CA证书是确定。详细信息: 错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书请在这里失败 更多细节:http://curl.haxx.se/docs/sslcerts.html
卷曲默认执行SSL证书验证,采用了“捆绑”的证书颁发机构的 (CA)公钥(CA证书)。如果缺省 软件包文件不够用,则可以使用--cacert选项指定备用文件 。 如果此HTTPS服务器使用由证书 中代表的CA签署的证书,证书验证可能失败,原因是证书存在 问题(它可能已过期,或者名称可能与 不匹配URL中的域名)。 如果您想关闭卷发对证书的验证,请使用 -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;
}