CC 等特定網域 sitemap 無法擷取問題
兩三年前申請了 emn178.cc 的網域,嘗試把 Blog 搬過來。那時候遇到 Google Search Console 的 Sitemap 提交,狀態一直停在無法擷取。嘗試了很多方法都沒辦法解決,結果手動提交的網頁也會慢慢自動被移除掉,最後永遠無法在 Goole 被搜索到。 後來曾經嘗試使用 GitHub Page,網站使用 emn178.github.io/blog 的方式提交,結果也是一樣狀態一直停在無法擷取,最後就放棄了。 事情經過了兩三年,在網路上看到有人遇到一樣的問題,一樣是 cc 網域,一樣永遠無法擷取,結果他使用別的網域就可以正常運作。 於是我也做了嘗試,我把網站掛在 Cloudflare 的 Worker 之下,使用 dev 的網域或是自己另外掛 io 網域,送出 Sitemap,結果都是馬上就提交成功。 我拿手上的網域也做了其他測試,使用 xyz 的網域,結果則是和 cc 一樣,卡在無法擷取。 最後我註冊了 com 的網域,則是秒成功。卡了幾年的問題,結果是因為 Google 有秘密封鎖特定網域。不過 GitHub Page 是 io 網域卻沒辦法 ...
ancestry vs awesome_nested_set - Rails 樹狀結構比較
在 Rails 中處理樹狀結構有一些套件可用,本篇文章將比較下面幾種解決方案: ancestry awesome_nested_set closure_tree 情境假設有個 model:Node,可以樹狀加入子節點。 功能ancestry設定使用新的規則,config/initializers/ancestry.rb 加入 1Ancestry.default_ancestry_format = :materialized_path2 需要使用樹狀結構的資料表要增加一些專用欄位 1234567891011121314create_table :nodes do |t| t.string :name, null: false # 必要欄位 t.string :ancestry, collation: 'C', null: false # 擴充功能 t.integer :ancestry_depth, default: 0 t.integer :children_count, default: 0 t.timestamps t. ...
acts-as-taggable-on vs. PostgreSQL Array (acts-as-taggable-array-on)
acts-as-taggable-on 是 Rails 中處理標籤功能的常用套件,而利用 PostgreSQL 特殊的 Array 型別也能實現類似的功能,像是 acts-as-taggable-array-on 套件就是以 PostgreSQL Array 實現。本篇文章將比較下面幾種解決方案: acts-as-taggable-on acts-as-taggable-array-on pg_taggable 情境假設有兩個 model:Post 和 User,Post 有 tags 屬性,並屬於某 User。可能常見的功能: 依照 tags 來搜索 Post。 取得某個 User 的 tags。 統計某個 User 的 tags 次數。(標籤雲) 功能acts-as-taggable-on設定acts-as-taggable-on 用另外兩張表來儲存標籤,一次性建好資料表,之後只要在 model 中設定就好: 12345class Post < ApplicationRecord belongs_to :user acts_as_taggable_on :tags ...
jbuilder vs active_model_serializers vs oj_serializers - Rails JSON API 解決方案選擇
Rails 產生 JSON 有內建的 as_json 可以使用之外,對於 JSON API 處理也有預設安裝的 jbuilder 套件,也有其他不同套件可以選擇。本篇文章將比較下面幾種解決方案: as_json jbuilder active_model_serializers oj_serializers 依據個人的經驗考慮以下需求: 容易整理維護。 定義好的結構能夠方便重用。 要能在程式中產生 JSON 物件使用。 效能。 方便測試。 情境假設有兩個 model:Post 和 User。想要分別產生下面的 JSON 結果: Post index 12345678910111213{ "posts": [ { "id": 1, "title": "Post Title", "timeago": "19 minutes", "user": { &qu ...
OpenSSL 使用指令進行 RSA 加解密
本篇文章介紹使用 openssl 使用指令進行 RSA 加解密。包含使用 PEM 和 DER 格式,以及使用 Base64 格式的方法。 加密首先我們把明文存在檔案裡,例如 message.txt: 1test 有兩種指令可以使用。 rsautlPEM使用公鑰來加密 1openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt -out encrypted 將加密後的資料存成檔案 encrypted。 可以使用不同的 padding 12345-ssl Use SSL v2 padding-raw Use no padding-pkcs Use PKCS#1 v1.5 padding (default)-oaep Use PKCS#1 OAEP-x931 Use ANSI X9.31 padding DER使用公鑰來加密 ...
OpenSSL 使用指令進行簽章和檢驗
本篇文章介紹使用 openssl 使用指令進行簽章和檢驗,例如可以使用 RSA 或 EC (ECDSA) 金鑰來簽章和檢驗。包含使用 PEM、DER 和 PVK 格式,以及使用 Base64 格式的方法。 簽章首先我們把要簽署的訊息存在檔案裡,例如 message.txt: 1test PEM使用私鑰來簽章,把簽章輸出到檔案: 1openssl dgst -sha256 -sign private.pem -out sig message.txt sig 為輸出的檔案名稱,-sha256 為用來簽章的演算法,可以使用下面指令來看有哪些可使用: 1openssl dgst -list 會輸出下面內容: 12345678910Supported digests:-blake2b512 -blake2s256 -md4 -md5 -md5-sha1 -mdc2 -rip ...
OpenSSL 指令產生 RSA 私鑰和公鑰
本篇文章介紹使用 openssl 指令產生 RSA 的私鑰和公鑰,包含 PEM、DER 和 PVK 格式。其中 PEM 分為 PKCS#1 和 PKCS#8 兩種格式。同時也說明如何生成包含密碼的方式。 產生私鑰無密碼PEM (PKCS#1)輸入下面指令,會產生 private.pem 私鑰檔案 1openssl genrsa -out private.pem 2048 檔案內容大概長這樣 123456789101112131415161718192021222324252627-----BEGIN RSA PRIVATE KEY-----MIIEpQIBAAKCAQEA3MiYJlVyBkmU9NKeV7gVBvkf7Je0PlzFl04G047XVaOV5mYBA5dYxjQw/Gib7EWE7XAO9gB9woCtFiKTeIaZ1dWMCGWAxRjTnb+eTtMQd2+U0VyDeMRD8joF2FuPnSwacSbccRzoa+Eg0PUKS/jB7iSDj1o7oBf3pgakogR5rwTx/i9QC866vYHQOHbVOT0MsWEiUlKhoyHxSXbnSF ...
OpenSSL 指令產生 EC 私鑰和公鑰
本篇文章介紹使用 openssl 指令產生 EC 橢圓曲線的私鑰和公鑰,包含 PEM 和 DER 格式。其中 PEM 分為 PKCS#1 和 PKCS#8 兩種格式。同時也說明如何生成包含密碼的方式。 產生私鑰無密碼PEM (PKCS#1)輸入下面指令,會產生 private.pem 私鑰檔案 1openssl ecparam -name secp256k1 -genkey -noout -out private.pem 檔案內容大概長這樣 12345-----BEGIN EC PRIVATE KEY-----MHQCAQEEILQ9di0umjx6JoN3j6oOf9AC09z6M2X1dmRJHQ2tjinHoAcGBSuBBAAKoUQDQgAEtPaEJXHpn09OBCz34QDeEltOVhAgs+qyB2MnyFr8t/lpmsgFyTKr80+pP7R3UV99tzMjSZ2DI/udIQOjKFdgEg==-----END EC PRIVATE KEY----- 其中,secp256k1 是指定的曲線,可以自行設定。以下指令可以查詢有哪些曲線可用: 1openss ...
Nginx 限制請求速率 (ngx_http_limit_req_module)
說明本篇文章介紹 Nginx 的限制請求速率模組 ngx_http_limit_req_module,說明可用指令和基本範例。限制請求速率通常用來防止 DDOS 或是暴力破解密碼等惡意攻擊,該模組有以下指令: limit_req_zone limit_req limit_req_dry_run limit_req_log_level limit_req_status 指令limit_req_zone 標題 內容 語法 limit_req_zone key zone=name:size rate=rate [sync]; 預設值 - Context http 這個指令是定義規則,相關的參數如下 key:可以視為符合的條件,例如照 IP、Server Name 或國家等等不同條件,參考最後的範例。 name:唯一名稱。 size:配置多少記憶體。 rate:限制的速率,可以是每秒或是每分多少次。 sync:是商業版的功能,暫時先不討論。 簡單的例子 1limit_req_zone $binary_remote_addr zone=perip ...
Nginx 限制連線數 (ngx_http_limit_conn_module)
說明本篇文章介紹 Nginx 的限制連線數模組 ngx_http_limit_conn_module,說明可用指令和基本範例。限制連線數通常用來防止 DDOS 等惡意攻擊,該模組有以下指令: limit_conn_zone limit_conn limit_conn_dry_run limit_conn_log_level limit_conn_status 指令limit_conn_zone 標題 內容 語法 limit_conn_zone key zone=name:size; 預設值 - Context http 這個指令是定義規則,相關的參數如下 key:可以視為符合的條件,例如照 IP、Server Name 或國家等等不同條件,參考最後的範例。 name:唯一名稱。 size:配置多少記憶體。 簡單的例子 1limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn 標題 內容 語法 limit_conn zone number; 預設值 - Con ...

