寫教學的最大目的是教會未來的自己
Get Adobe Flash player

pupuliao

HTTP轉HTTPS的血與淚,funtime https 轉換記

最近替我們公司網站 從http 轉換成https

這真的事血與淚的故事阿

 

https 的架設流程很簡單,基本上市已下幾個步驟

 

1.購買憑證,這部份我們公司是買全網域都可以用的

2.server 設定

我們是使用nginx  首先 把原先的server 設定加上 憑證,憑證包含一個key 跟一個 crt,crt應該就是憑證,key 是我們自己生成的私鑰

有些廠商不是給crt 而是給pem 不過差不多,另外 還有鎖有上游的憑證,這部分就通通放報crt 後面就OK了

另外 各人建議 把 80 port的網業透過301 通通轉址到 443 port的 https

3.網頁修正

這才是最令人頭大的地方

因為我們公司網站有放大量的外部廠商iframe 或是 js,另外因為歷史遺留問題

許多地方式使用絕對路徑,這在轉換的過程中 出現很多問題

因為在https的網頁中,大多數的瀏覽器會預設不讀取 http的 CSS /JS / iframe,這會導至網站一堆地方出問題

雖然有下列者種語法可以快速解決(功能是強制升級)

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
但還是有一些問題
1.IE 系列不之源
2.舊版safari不支援
3.如果廠商的憑證有問題,還是無法解決

說了那麼多 只是想要說
已後寫code多注意阿
最好不要用絕對路徑
http:// 最好改成 //,這樣系統會自動判定

Post to Twitter Post to Plurk Post to Facebook Send Gmail

薩利機長:哈德遜奇蹟Sully-觀後感

今天 去看了”薩利機長:哈德遜奇蹟Sully”這部電影

這算是ㄧ部根據事實翻拍的電影,影片時間有點短,但是相當不錯 有很多事情可以讓人去思考

 

故事是在描述 薩利機長在飛機起飛後 碰到鳥群 導致兩部引擎都故障後被迫迫降哈德遜河的故事

 

這部片 用了很多不同腳色的角度去描述這件事

1.大眾的角度:機長救了大家 他是個英雄

2.機長的角度:從頭到尾都是在近自己的責任讓大家都活下來,但是他對於自己的選擇是否正確都不敢承認

3.飛安官員的角度: 以事後孔明的方式用”看姒”公平的方式檢驗認為機長應該可以安全降落機場,但卻完全忽略了”人性”

 

這部片反映出了 限實生活中 許多看姒合理的事情實際上多麼的不合理

例如飛機迫降的SOP 標準流程太長根本來不及走完,是機長靠自己的判斷挽救了生命

還有是後的飛行模擬完全忽略了 事件的突發性,在沒有經過相關訓練的情況下,返回機場的可行性

 

 

 

恩 ..舊是這樣….反正我也不太會寫文章 就這樣吧

Post to Twitter Post to Plurk Post to Facebook Send Gmail

強大的資料庫熱備份軟體 xtrabackup

最近我們公司網站碰到一個嚴重問題

就是原先使用的galera 的同步系統時有一個嚴重缺陷,就是 在 DB 故障再重新同步後,會造成另一台DB 也鎖死,雖然仍可以讀取但沒鳥用啊…..

當然這個問題 可以透過 架設三台來解決,但是 這成本太高…..

 

之後我們就找到一個很強的備份系統 xtrabackup

他 是直接在DB的檔案層做備份,針對innoDB 備份 可以做到快速熱備份

可以多線同時備份,可以快速壓縮,可以快速還原

經過測試在50G的資料量 備份可以在兩分鐘內完成,還原也只需要五分鐘(mysqldump大概要10~20倍的時間)

他可以全部備份、局部備份、增量備份,不過並不建議增量備份,他還原很麻煩…

 

不過他還是有缺點的

1.innodb的 ibdata檔案過大時,會備份很久,我在測試時只要兩分鐘,實際上機 要20分鐘….

2.有MYSYIAM 時會有鎖表的備份,所以使用前請小心

3.當備份時碰到鎖表時會備份 拜請小心

4.局部備份跟還原 不是很方便,也不建議使用(有要使用此功能的 請使用2.2版)

 

 

官方網站:https://www.percona.com/doc/percona-xtrabackup/2.4/index.html

Post to Twitter Post to Plurk Post to Facebook Send Gmail

mariaDB+galera 的ㄧ些優缺點

我們公司網站www.funtime.com.tw 已經使用mariaDB+galera 的DB cluseter 系統已經一段時間了

我們是使用兩台DB 的同步運作模式

這套同步系統的最大好處是她的同步運作效率很高,相同的資料量用檔案匯入要4小時’ 但SST 同不只需2小時

先來介紹一下galera的運作原理

galera 是在收到query時先作分析,如果是單純select 就會直接回應給對方,如果是insert這類會更改DB的指令,就會同不丟給每個cluster上的DB

另外galera有一個快取機制,儲存最新更新的資料,如果當某個DB故障重啟時,她會使用其他DB的ˊ快取來回復,這稱作IST  她速度很快

另外還有一個機制叫做SST,這是當 DB掛點帶久超出快取容許範圍,就會作整個DB的重新同步,這時間就會比IST久很多

SST有一個恐怖缺限,就是在同步時,會把另一台DB鎖死,當然為了同步這樣做合理,但碰到我們公司這樣只有兩台DB的情況下就麻煩了

ㄧ台掛了兩台都不能用………

 

當然官方建議的方案是 開三台………..

好吧 這套系統的缺陷就在這了,對於需求不上不下的網站來說這有點浪費

 

Post to Twitter Post to Plurk Post to Facebook Send Gmail

MYSQL 轉mariaDB+galera的兩三事

前幾個月我們公司的網站的資料庫系統從MYSQL 5.1.3轉移到mairaDB ,其中最大的目的就是使用galera 同步技術,這當中碰到一些狀況…..

這一篇 主要就是說明一些我所知道的事,至於怎麼安裝的,請自己google吧…..

 

 

一開始我要說的是”MYSQL 轉 mariaDB 不保證完全相容….”,沒錯就是不完全相容,架設你的網站用的SQL 有點複雜,強烈建議先去測試一下,個人猜測是這樣的,mariaDB 只保證 從他所說的MYSQL版本移植過去是相容的,其他版本號不保證,另外因為mariaDB有些加速的手法會導致部分語法失靈,個人目前碰到兩種狀況 繼續閱讀

Post to Twitter Post to Plurk Post to Facebook Send Gmail

網站平移備份

最近在做網站的測試,所以開了 台測試server,要把網站的資料複製到測試server

本來我都是 先把MYSQL 匯出、FTP 下載所有檔案

 

最近我學到新的快速方法

參考資料 http://jashliao.pixnet.net/blog/post/164556993-%E6%AF%8F%E5%A4%A9%E4%B8%80%E5%80%8Blinux%E6%8C%87%E4%BB%A4–scp%E6%8C%87%E4%BB%A4%28%E9%81%A0%E7%AB%AF%E6%AA%94%E6%A1%88%E5%8A%A0%E5%AF%86%E6%8B%B7%E8%B2%9D-

 

1. 檔案水平轉移法

scp -r /home/XXX/public_html/* XXX@IP:/home/XXX/public_html

用法和 cp 相同 -r : 轉移資料夾

從本地 複製到 遠端特定IP 的特定資料夾

倒過來寫也OK 可以從遠端抓資料過來

 

2.MYSQL 水平備份

mysqldump -u [SOURCE_userid] -h [SOURCE_IP] -e -q –password=[SOURCE_PASSWORD] SOURCE_db_Name | mysql -u [DISTANCE_userid] –password=[DISTANCE_PASSWORD] -h [DISTANCE_IP] DISTANCE_db_Name

 

這是直接把DB dump出來後直接匯入到 另一台DB 中,不過要特別注意 如果資料庫太大 超過連線時間 會直接炸開喔

Post to Twitter Post to Plurk Post to Facebook Send Gmail

MYSQL透過 SQL_CALC_FOUND_ROWS取得資料總筆數

參考自:http://blog.farmer.idv.tw/?p=250

http://ma-bank.com/item/998

 

通常我們碰到資料量大的結果,我們會使用分頁的方式來呈現,那分頁的方式我們會使用到limit的方式,但是這有個缺點,我們不知道解果有多少個,通常我們會下兩次SQL,一次取得資料總量,一次取資料 但這太麻煩了,現在有個快速的好方法

 

在 SELECT  A,B,C FROM….WHERE 語句中 加入 SQL_CALC_FOUND_ROWS

變成

SELECT SQL_CALC_FOUND_ROWS  A,B,C FROM …. ..WHERE

他是參數不是資料欄位所以不需要用逗點隔開

之後只需要用

 SELECT FOUND_ROWS() 就可以取出剛剛SELECT 結果的資料總量,就算是有使用LIMIT也一樣

Post to Twitter Post to Plurk Post to Facebook Send Gmail

提升資料庫 (SQL)效能

引用自 http://blog.xuite.net/j2ee/code/15120677-調校+SQL+以徹底改善應用程式效能

單純引用 給自己看

有些程式員在撰寫前端的應用程式時,會透過各種 OOP 語言將存取資料庫的 SQL 陳述式串接起來,卻忽略了 SQL 語法的效能問題。版工曾聽過某半導體大廠的新進程式員,所兜出來的一段 PL/SQL 跑了好幾分鐘還跑不完;想當然爾,即使他前端的 AJAX 用得再漂亮,程式效能頂多也只是差強人意而已。以下是版工整理出的一些簡單心得,讓長年鑽究 ASP.NET / JSP / AJAX 等前端應用程式,卻無暇研究 SQL 語法的程式員,避免踩到一些 SQL 的效能地雷。

1、資料庫設計與規劃

• Primary Key 欄位的長度儘量小,能用 small integer 就不要用 integer。例如員工資料表,若能用員工編號當主鍵,就不要用身分證字號。

• 一般欄位亦同。若該資料表要存放的資料不會超過 3 萬筆,用 small integer 即可,不必用 integer。

• 文字資料欄位若長度固定,如:身分證字號,就不要用 varchar 或 nvarchar,應該用 char 或 nchar。

• 文字資料欄位若長度不固定,如:地址,則應該用 varchar 或 nvarchar。除了可節省儲存空間外,存取磁碟時也會較有效率。

• 設計欄位時,若其值可有可無,最好也給一個預設值,並設成「不允許 NULL」(一般欄位預設為「允許 NULL」)。因為 SQL Server 在存放和查詢有 NULL 的資料表時,會花費額外的運算動作 [2]。

• 若一個資料表的欄位過多,應垂直切割成兩個以上的資料表,並用同名的 Primary Key 一對多連結起來,如:Northwind 的 Orders、Order Details 資料表。以避免在存取資料時,以叢集索引掃描時會載入過多的資料,或修改資料時造成互相鎖定或鎖定過久。

—————————— 繼續閱讀

Post to Twitter Post to Plurk Post to Facebook Send Gmail

解決 wp-postview 計數失敗的問題

這個問題主要是因為 修改過 wordpress 核心所產生的…..

 

目前WP-postview 有兩種計數模式,一種是 透過PHP的方式 計數,另一種則是為了解決 快取功能 的ajax的技術方式。

這次碰到的問題就主要是ajax的問題。

 

發生原因:

在wp-postview外掛中,主要的code都在wp-postview.php當中,其中要wordpress 載入ajax指令的是下面這支function

function wp_postview_cache_count_enqueue()

的下面兩行指令(我有些參數修改了…)

wp_enqueue_script( ‘wp-postviews-cache’, $tempJS, array( ‘jquery’ ), ‘1.68’ , true );

wp_localize_script( ‘wp-postviews-cache’, ‘viewsCacheL10n’, array( ‘admin_ajax_url’ => $tempJS2, ‘post_id’ => intval( $post->ID ) ) );

 先簡單說明一下,這兩行的API都是 wordpress的載入js的指令,在執行過後會通知wordrpress 在載入頁面的時候載把js引入到網頁中,這中常在wp_header();或是wp_footer();中執行,所以theme中的這兩行指令絕對不要拿掉….

 

OK經過測試,上面這兩行指令有正常執行,經過測試主要是因為wordpress的jquery 載入設定被改掉了…

剛剛我說,wordpress 會依照你的要求 引入你要的JS,但是在這之前他會要你先寫下你的js有需要那些前置JS,而我們所需要的jquery雖然有載入,但是不是用wordpress 官方的載入方式,導致wordpress 以為缺少前置JS 而不予載入

 

解決方法,在下列檔案中

\wp-includes\script-loader.php

 有下列三行code,請確定他都有在跑…..

// jQuery

$scripts->add( ‘jquery’, false, array( ‘jquery-core’, ‘jquery-migrate’ ), ‘1.10.2’ );

$scripts->add( ‘jquery-core’, ‘/wp-includes/js/jquery/jquery.js’, array(), ‘1.10.2’ );

$scripts->add( ‘jquery-migrate’, “/wp-includes/js/jquery/jquery-migrate$suffix.js”, array(), ‘1.2.1’ );

就是這樣….

 

 

參考資料

http://yusi123.com/3086.html

http://codex.wordpress.org/Function_Reference

Post to Twitter Post to Plurk Post to Facebook Send Gmail

適用電子郵件訂閱網站

輸入你的電子郵件地址訂閱網站的新文章,使用電子郵件接收新通知。

訂閱 8 其他用戶

交換連結

Copyright © 2017. All Rights Reserved.

歡迎光臨
初音