标题是一个curl的请求错误,

curl https://www.xxxx.com
curl: (35) SSL received a record that exceeded the maximum permissible length.

环境是部署在了阿里云,于是咨询了阿里云的工程师,结果不出所料阿里客服一直敷衍说要用他们提供的参考样例,最终还是要靠自己。阿里云建议的配置如下:

server {
    listen 443;
    server_name localhost;
    ssl on;
    root html;
    index index.html index.htm;
    ssl_certificate   cert/214911897850933.pem;
    ssl_certificate_key  cert/214911897850933.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        root html;
        index index.html index.htm;
    }
}

但是在nginx 1.15以上的版本中会有警告:nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /usr/local/nginx/conf/servers/www.xxxx.com:

于是我就注掉了“ssl on;”这行!这是错误的根源。并且我在多次试验中都重复了这个操作,直到深夜的一次试验中决定保留那个警告看看,结果就神奇的成功了。

最后,我又我又不忘去教育了一下阿里的客服,告诉他要专心做试验不要老是敷衍了事。

第二天收到了客服的反馈,看来这次他确实做测试了。下面是他反馈的结果:

工程师   号 :    我们尝试了一下,但并未找到 1.15.1   源代码, 使用了 1.15.3.  使用这个配置后,是正常的。  您可以参考一下。  

server {
    listen       443 ssl;
    server_name  1234.xxxx.cn;

    ssl_certificate      /usr/local/nginx/ssl/xxxx.pem;
    ssl_certificate_key  /usr/local/nginx/ssl/xxxx.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers  on;

    location / {
        root   html;
        index  index.html index.htm;
    }
}

在我的配置中还有另外一个问题:有一个server中配置了443端口但没有开启ssl,导致请求都跑到了这个里面。注掉这部分就ok了。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐