1. 程式人生 > >讓多說評論框完美支援 HTTPS

讓多說評論框完美支援 HTTPS

提醒:本文最後更新於 1185 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

我的部落格之前一直部署在 Linode,使用 Disqus 提供的評論服務。Disqus 作為第三方社會化評論的鼻祖,無論功能還是體驗,都堪稱完美。雖然之前 Disqus 經常載入失敗,我也一直在堅守。最近我的 Linode 持續無法訪問,幾番折騰之後還是換到國內雲主機並備案了。藉著這次機會,我也把評論從 Disqus 遷移到了國內的多說。多說官方對 HTTPS 的支援並不完美,本文記錄我對它的幾處改造。

Disqus 和多說都是根據指定 ID 進行評論聚合的第三方系統,將頁面上 Disqus 的引用程式碼換成多說的程式碼,再按照文件改改引數,評論功能就遷移完成了。資料遷移可以使用前人造好的輪子,例如 Github 上的

GavinFoo/DISQUS2DUOSHUO。功能和資料遷移都很簡單,這裡略過不寫。

我的網站配置了 CSP 策略,需要把多說用到的域名配置到白名單之中。以下是本站 CSP 全部規則:

content-security-policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: https://*.duoshuo.com; img-src 'self' data: https://*.duoshuo.com; style-src 'self' 'unsafe-inline' https://*.duoshuo.com; connect-src wss://*.duoshuo.com:* https://*.duoshuo.com

多說的種子檔案支援 HTTPS,直接把官方地址替換為 HTTPS 即可。但多說有幾個地方沒考慮周到,需要額外處理:1)使用者頭像,多說支援多種第三方登入方式,使用者頭像也支援使用了第三方地址,而這些地址基本都是 HTTP;2)表情,在多說選擇表情的浮層中,只有 wordpress 分組中的表情放在多說伺服器上並支援 HTTPS,其餘分組全部直接使用了 Sina 微博的 HTTP 地址。另外多說評論正文中的表情,也需要替換為 HTTPS 地址。

要解決使用者頭像問題,可以借用本站 HTTPS 做一個反向代理。我在 Nginx 配置增加了以下內容:

proxy_cache_path    /home/xxx/proxy_cache_path levels=1:2 keys_zone=pnc:300m inactive=30d max_size=10g;
proxy_temp_path     /home/xxx/proxy_temp_path;
proxy_cache_key     $host$uri$is_args$args;

server {
    ... ...

    location ~ ^/proxy/(\w+\.)(bdimg\.com|cdncache\.org|douban\.com|gravatar\.com|qlogo\.cn|sinaimg\.cn|xnimg\.cn)(\/.*)$ {
        valid_referers blocked server_names;
        if ($invalid_referer) {
            return 403;
        }

        proxy_connect_timeout    10s;
        proxy_read_timeout       10s;

        proxy_pass               http://$1$2$3;

        proxy_cache              pnc;
        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 cache.ququ";

        expires                  max;
    }

    location ~ ^/proxy/(.*)$ {
        valid_referers blocked server_names;
        if ($invalid_referer) {
            return 403;
        }

        rewrite       ^.*$ /static/img/blog/default_avatar.png last;
    }

    ... ...
}

以上配置做了幾件事情:1)針對白名單中的 URL 做了反向代理,針對白名單之外的 URL 輸出預設頭像;2)通過 Nginx 的 proxy_cache 以及 HTTP 的快取機制,增加訪問速度;3)針對這個 proxy 服務啟用了嚴格的 referer 限制(空 referer 都不允許)。

有了反向代理之後,可以對多說的 embed.js 動手術了。我沒有找到無侵入的補丁方式,只能粗暴地將官方 embed.js 託管在本站進行修改。一共修改了以下幾處(為了看得更清楚,我加入的程式碼放在註釋裡):

avatarUrl: function(e) {
    /*
    if (e.avatar_url) {
        e.avatar_url = e.avatar_url.replace(/^http\:\/\//, "https://imququ.com/proxy/");
    } else {
        nt.data.default_avatar_url = '/static/img/blog/default_avatar.png';
    }
    */

    return e.avatar_url || nt.data.default_avatar_url
}

這處修改,是讓多說使用者頭像走前面配置的 proxy 服務。對於無頭像使用者,我直接返回了預設頭像地址,減少一次 proxy。

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>"), j.smilies[e] = t
}

這處修改,是讓多說不載入 Wordpress 之外的分組表情。由於只剩下一個分組,所以表情浮層樣式我也微調了一下,具體效果請看本文評論(實際上,多說評論的樣式我改了好多處)。將 Sina 微博表情替換為 proxy 地址,或者是傳到支援 HTTPS 的 CDN 也可以,但我覺得沒有必要。如果圖省事,也可以直接在多說後臺關閉評論表情功能。

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 + '">...'){
    ...
}

這處修改,是將評論內容中的表情地址由 HTTP 替換為 HTTPS。

經過以上處理,多說評論所需資源全部會走 HTTPS 了。由於多說程式碼會更新,本文具有一定的時效性,大家可以參考我的做法自行修改,不要照搬程式碼。

最後,我在遷移 Disqus 到多說的過程中,參考了以下兩篇文章,在此表示感謝:

注:一番折騰之後,我還是迴歸了 Disqus,詳情請見 »

--EOF--

提醒:本文最後更新於 1185 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

相關推薦

評論完美支援 HTTPS

提醒:本文最後更新於 1185 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 我的部落格之前一直部署在 Linode,使用 Disqus 提供的評論服務。Disqus 作為第三方社會化評論的鼻祖,無論功能還是體驗,都堪稱完美。雖然之前 Disqus 經常載入失敗,我也一直在堅守。最近我的 Li

個人域名下GithubPage完美支援https

前言 最近筆記本掛了送去維修,耽誤了我的學習計劃,就先把月初的一點小技巧發出來充充數……話說,沒了筆記本的日子,看書反而更加認真了~  遵從我2016年10月時,定下的目標:於2017年開始要堅持寫部落格。於是,我在GithubPage上搞了個靜態部落格網站 https:/

封裝UniversalImageLoader框架實現一行程式碼即可載入圖片,且完美支援https圖片請求

最近由於蘋果app要求ios應用網路請求必須使用https,於是公司後端把所有的http介面改為https請求,關於資料的請求   網上也有很多的文章 看文章基本可以實現讓自己的app支援https  但是由於我的圖片載入是使用的第三方UniversilImageLoade

https-網站支援https協議2

上篇寫到怎麼搭建https://mp.csdn.net/postedit/79349084 顯示 域名剩餘天數: ./certbot-auto  certificates     手工更新: ./certbot-auto certonly --w

富文字編輯器支援複製doc中張圖片直接貼上上傳

Chrome+IE預設支援貼上剪下板中的圖片,但是我要釋出的文章存在word裡面,圖片多達數十張,我總不能一張一張複製吧? 我希望開啟文件doc直接複製貼上到富文字編輯器,直接釋出   感覺這個似乎很困難,因為Ueditor本身不支援,粘貼後直接就是空白,這裡面一定有原因。 好,開始嘗試UM

超簡單的JAVA 權重分配,支援個權重,完美實現五五開,等任何比列.

/** * 根據總訂單數和分配的訂單數動態調整下次分配比例 */ public class WeightTest { public static void main(String[] args) { int number = 1000;//假設10

如何Create-React-App的應用自動支援HTTPS?

我們知道,我們在使用React框架的時候,可以通過Create-React-App命令生成一個React的應用。但是有的時候,我們想讓其支援HTTPS,應該如何做呢? 其實不難,只要我們設定在系統的環境變數裡面設定了,HTTPS=TRUE PORT=443就行了。 那麼為

修改WordPress預設評論表情(附:跳轉到評論的方法)

先吐槽一下:這兩天博主折騰搶票火車票去了,部落格也沒怎麼打理,最不爽的是折騰到最後才弄到一張無座的,唉,說多了都是淚啊!鐵道部你技術不行可以招標啊,幹嘛拿老百姓做小白鼠呢?就你那破網站,相信大把的高手可以做得比你們好百倍,還不用浪費那麼多資金!吐槽完畢。。。 之前用著大路社的主題,個人也是折騰了

怎麼自己的網站支援https 訪問

讓自己的網站能夠通過 https://你的域名 進行訪問。 實現這個需要給你伺服器安裝安全證書。安全證書是有償的,你要去申請,當然如果你的伺服器在阿里雲,你可以向阿里雲免費申請SSL證書(每個帳號最多申請20個)。 申請地方在 安全(雲盾) - 證書服務

iis7配置fastcgi完美支援php版本共存,完美解決php環境變數問題

1、在全域性點選fastcgi 新增php的執行路徑 3、編輯設定,點選環境變數這部分 點選新增 PHPRC,name填寫PHPRC,value值指定對應php路徑 PHP_FCGI_MAX_REQUESTS,名稱填寫PHP_FCGI_MAX_REQUES

實時監聽輸入值變化的完美方案:oninput & onpropertychange(真正完美,支援ie9以下,ie10,chrome)

引用地址:http://www.cnblogs.com/lhb25/archive/2012/11/30/oninput-and-onpropertychange-event-for-input.html 在 Web 開發中經常會碰到需要動態監聽輸入框值變化的情況,如果使

網站補充支援HTTPS(免費方案),並HTTPS支援偽靜態重寫

一個客戶的網站,要申請小程式,結果後臺只認HTTPS開頭的網站。看來都是蘋果的標準要普遍化啊。1:申請 又拍雲,親測可用: https://www.upyun.com/1.1控制檯-CDN下繫結域名;域名真實性核驗的時候,還需要去解析記錄補一個@型別的TXT,官網有幫助,很快

Extjs選下拉multiSelect支援reset

多選,增加時會記憶上一次的選中的內容,表單reset對其無效,通過此修改可使表單reset時也會跟著清空。 以下程式碼是在multiSelect.js的基礎上進行簡單修改的。 if('function' !== typeof RegExp.escape) { RegExp.

apache支援https的設定步驟

總體分兩步:一、生成SSL證書;二、設定Apache的SSL配置 1.   安裝openssl yum install mod_ssl openssl 2.    生成自簽名的證書 #Generate

nginx完美支援Thinkphp的配置

習慣了用apache後,當第一次用nginx時,把原來的專案(thinkphp框架)部署在新伺服器上的時候,驚呆了! 所有的URL模式下都不能正常執行,甚至連css,js檔案都不能正常載入。 原因是ngibx不支援pathinfo 主要是需要配置nginx location

https-網站支援https協議

我的環境是:centos,nginx. 將要使用 Let's Encrypt免費SSL -------------------------------------------------------- 1.獲取certbot客戶端 wget https://dl.eff.or

wordpress百度分享支援https

原理很簡單,就是將百度分享的程式碼從百度的伺服器本地化。 1、針對begin主題 我們開啟百度分享的方法是依次開啟【外觀】–》【主題選項】–》【輔助功能】,往下面翻,可以看到有一個啟用百度分享的選項,勾上。 2、我們檢視footer.php

自定義 iOS 密碼或驗證碼輸入支援位驗證碼,4位或6位驗證碼自己選擇。

密碼框 樣式                           自定義輸入驗證碼樣式             git地址: https://github.com/HSFGitHub/CodeInputView.git 支援全部自定義 ,幾位驗證碼的變化,輸入樣式,

如何在阿里雲上申請免費的SSL證書並nginx支援https

雲盾證書服務入口: 選擇免費型,記得先選擇保護型別為一個域名,不然預設是通配,點不出來免費型的選項 然後支付購買 購買完後 ,會在訂單列表看到,進行提交稽核,補充資訊,我的是已經稽核完的,稽核前未截圖。  提交稽核前會讓你填寫個人資

phpcms支援https

本文整理自PHPCMS官方論壇的一篇文章,感謝作者的奉獻。 假設已經配置好ssl證書,不知如何申請ssl證書者請自行百度。 1