多说是国内的一个应用较为广泛的社会化评论系统,然而对https的支持并不完美,会从非https地址加载头像导致失去小绿锁,本文记录了对其进行的改造以便能够支持https。


多说的js支持https,但是却会从非https地址加载头像(主要是新浪不支持https),所以需要先用nginx搭建反代,配置如下,自行根据自己情况修改:

server {
    listen 443 ssl;
    server_name ds.cdn.moe.sh;
    
    ssl on;
    ssl_certificate D:/cert/moesh.crt;
    ssl_certificate_key D:/cert/moesh.key;
    ssl_session_cache shared:SSL:5m;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384;';
    ssl_prefer_server_ciphers on;
	
	error_log d:/1.log;
    location ~ ^/proxy/(\w+\.)(bdimg\.com|cdncache\.org|douban\.com|gravatar\.com|qlogo\.cn|sinaimg\.cn)(\/.*)$ {
		proxy_connect_timeout    10s;
		proxy_read_timeout       10s;
		proxy_pass	       http://$1$2$3;
		proxy_cache_valid	200 30d;
		proxy_cache_lock	 on;
		proxy_cache_lock_timeout 5s;
		proxy_cache_use_stale    updating error timeout invalid_header http_500 http_502;
		add_header	       X-Cache "$upstream_cache_status from CDN.BJ";
		expires		  max;
	}
}

注意,还需要在nginx.conf中指定dns,否则nginx无法解析域名(dns根据自己的实际情况改)

resolver 111.67.201.200;

搭建好反代之后,需要修改多说的js,修改下面几处(注释的为修改后的内容):

avatarUrl: function(e) {
/*
    if (e.avatar_url) {
        e.avatar_url = e.avatar_url.replace(/^http\:\/\//, "https://ds.cdn.moe.sh/proxy/")
    }
	return e.avatar_url || rt.data.default_avatar_url
*/
	return e.avatar_url || rt.data.default_avatar_url
},
addSmilies = function(e, t) {
/*
  if(e !== 'WordPress') return;
*/
    var s = j.smiliesTooltip;
    s && s.el.find("ul.ds-smilies-tabs").append("<li><a>" + e + "</a></li>"), S.smilies[e] = t
}
var t = "",
	s = e.post,
	i = e.options,
	r = s.author;
/*
s.message = s.message.replace(/http:\/\/static\.duoshuo\.com\//g, 'https://static.duoshuo.com/');
*/
if (t += '<li class="ds-post" data-post-id="' + s.post_id + '">...') {
...
}

修改之后,所有内容都会走https了,就不会再出现烦人的混合内容警告和黄色三角了。

(感谢imququ https://imququ.com/post/duoshuo-and-https.html)