2012-04-21 425 views
2

我有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; 
} 

回答

1

巴达姆清。我的非标准负载均衡器实际上有nginx运行SSL终止。我没有注意到这一点,但我认为我正确地做了一切。要点是,当您在收购时接管业务时,将其标准化并存档!有一些非常奇怪的工程师:)