VAIO S56 安裝 Vista Driver 的正確順序

兩年前 VAIO S56 買來時,原先所搭配的作業系統是 Windows XP Professional,而原廠附贈的還原光碟相當便利,使用還原光碟可將 S56 還原為原先出廠的狀態,使用者無須另外自行安裝各項裝置的驅動程式,S56 買來就是可以馬上上路開始工作。去年 Vista 推出後,試用 Vista 一陣子後,覺得 Vista 在 S56 上的執行效能,似乎也還蠻不錯的,於是便在 Yahoo 購入了 Vista Home Premium。使用正版的感覺的確不錯,尤其是微軟在 Windows Update 上增加許多檢核正版作業系統的限制之後,使用盜版軟體的確變得很麻煩,不用再到處找尋 crack,或是擔心 crack 中含有木馬之類的問題。其實支持正版的確也是資訊人所該做的事啦。

不過 S56 自行安裝 Vista 完畢之後,其實距離真正方便便利仍有一大段距離。怎麼說呢?除了部分驅動程式 Vista 仍未內建,所以裝置管理員中仍然會有三項裝置處於驚嘆號的狀態(這三個裝置分別是 Texas Instruments PCI7420 Integrated FlashMedia Controller、Sony Notebook Control Device 以及 Sony Programmable I/O Control Device),後二者可以透過 Windows Update 更新時可以自動找到驅動程式,而前者我試著使用 XP 的驅動程式來安裝,竟也正常無誤的安裝成功,所以驅裝置可以全部安裝完畢。不過其餘音效與顯示卡的部分,雖然 Vista 內建驅動程式,但音效的驅動程式重新開機之後,竟會顯示此驅動程式不相容於 Vista。這還真扯!也許是 Realtek 拿給 Vista 認證的驅動程式,微軟自己並沒驗證過 @@。

顯示卡雖然 Vista 也內建 NVidia GeForce GO 6400 顯示晶片的驅動程式,不過這內建的驅動程式在播放 DVD 電影,似乎動態的影像無法顯示出來。想當然爾,是去原廠找驅動程式,而在原廠網站選擇下載 GeForce GO 6400 驅動程式時,會告訴你請自行至 Sony 網站下載。但是回到 Sony 網站來找,竟發現 Sony 並未提供給 S56 Vista 版本的各項驅動程式 @@。找了很久,終於有人提到可以自行修改原 NVidia 廠驅動程式的 INF 安裝檔,加入 GeForece GO 6400 晶片的參數,使得S56 安裝時可以認得這是顯示卡的驅動程式。安裝完畢後,果然電影放起來就沒問題了。

其實還有一個最大的問題是,S56 鍵盤上一大堆的快捷鍵,像是 S1 / S2、Fn 功能鍵,藍芽與 Wireless LAN 切換的功能完全失效。S1 / S2 快捷鍵不能用就算了,但 Fn 功能鍵實在是很重要,像是螢幕亮度明暗、PageUp / PageDown / Home / End、LCD / 外接螢幕切換,這些功能沒了 Fn 功能鍵之後,也等於是廢了。在 Google 上找了很多文章,大抵都是提到要安裝 Sony Utility DLL 與 Sony Event Service 等軟體套件才能將這些功能鍵恢復。不過試了很久都沒試出來,最後等到我終於受不了沒有 Fn 鍵的日子,最後還是放棄了 Vista,重新回到 XP 的懷抱。

這兩天趁著春節過年沒事做,又把塵封已久的 Vista 挖出來想再來試試。重灌後沒想到問題還是一樣,不過這次有找到一篇文章提到如何將 VAIO SZ38 升級至 Windows Vista,原來 Sony 的各項驅動程式與軟體套鍵之間是有一個安裝的先後順序以及何時該重新開機步驟。我依樣畫葫蘆,比對SZ38 與 S56 之間的周邊裝置差異,調整了一下安裝順序,竟然就一次成功了,所有的快捷鍵與功能鍵馬上重獲新生。欣喜之餘,第一個想到的是就是趕緊記錄下來,免得下次又碰到一樣的情形。

下面就是各項驅動程式及軟體套件的安裝順序

  1. Sony Utilities DLL Update
  2. Sony Shared Library Update
  3. 重新開機
  4. VAIO Event Services Update
  5. Realtek High Definition Audio Driver
  6. VAIO Control Center
  7. Sony Utility Series
  8. VAIO Power Management
  9. Wireless Switching Utility
  10. Texas Instruments Driver for Memory StickR Controller Driver
  11. ALPS Pointing Device (Touchpad) Driver and and Control Utility
  12. NVidia_GeForce_100.40
  13. 重新開機
  14. Sony Utility Series update
  15. 重新開機

如果 VAIO 要從 XP 升級到 Vista 的話,可以參考看看。

 

 

2007 年璀璨的煙火

由於 101 招商已接近尾聲,往後將無架設施放煙火的足夠空間,因此今年的跨年煙火聽說是 101 施放煙火的最後一年。今年預計一樣是到二姐家去吃晚餐聊天,等待跨年時刻的到來。不過不同以往,今年將到公司的樓頂上去看跨年煙火,公司就在信義區附近,高度也夠高,預計應該是會有不錯的視野。

當天大約 10:50 就離開二姐家步行前往公司,公司雖然有車位,但是怕到時候散場人潮會讓交通打結,所以還是決定直接步行前往。走了大約 30 分鐘就到了,這時才發現,怎麼樓頂有這麼多不認識的人?看來一樓警衛並沒有很認真的檢核進出人員的身份。頂樓的護欄相當的高聳,而且已經爬滿了人。另外頂樓還有個水塔,水塔上的空間也還不小,於是還沒佔到位子的人都紛紛爬上了水塔頂端。水塔上的視野真的很讚,環顧附近四周,完全沒有比我們更高的建築物,於是就開始架設腳架。沒想到才稍微拍了一下,警衛就來趕人了。不過水塔頂端完全沒有護欄,其實具有相當的危險性,所以想想還是就乖乖下到頂樓平台來。最後還是在護欄圍牆上找了一個位子,還好圍牆夠厚,腳架還稍微可以放上去,不過就是得小心點兒就是了。

架好腳架後,就開始試拍,一方面是因為先調整各種參數來試拍,免得等會兒煙火開始施放才要來調整參數就來不及了。另一個原因是由於夜景與煙火的測光數據差異很大,因此最好是施放前後各拍一張,事後再來合成。煙火很準時的在 0 點整爆開,我調成了連拍模式快門狂按不放,不過 5D 的連拍張數實在是不夠多,最後就看到觀景窗中寫著 Busy,必須等資料都寫入 CF 卡後才能繼續拍。停停拍拍,188 秒的煙火很快就結束了,於是就回家做後製合成的工作。

合成的方法其實很簡單,用 PhotoShop 大約四到五個步驟就可以完成。

1.新開一個檔案,然後將要合成的兩張圖片做成兩張圖層放入。

 

2.點選 "圖層",選擇有煙火的那張圖層,然後調整參數為 "變亮"。

3.最後調整一下兩張圖,讓圖中的元素可以接合得比較完整。

4.在選擇 "圖層 –> 影像平面化",就完成了。

下面就是後製的幾張圖片:

 

Updated:(2008/01/03)
用 GIF 弄了一張煙火連續爆發的動畫

Vigor 2910 Dual WAN 的另類用法

Vigor 2910 產品特色其中之一就是它具有 Dual WAN port,也就是說它可以同時接上兩條 ISP 對外的線路,例如:第一個 WAN port 接的是 CHT  ADSL 線路,第二個 WAN port 則可以接 Cable Modem 的寬頻線路。同時接兩條對外線路,除了頻寬倍增之外,另一個考量點就是備援線路。如果一條線路故障了,另一條線路可以馬上發揮作用。如果兩條線路都正常時,Vigor 2910 也具有負載平衡的功能,可以自己決定路由要走什麼線路出去。

Vigor 2910 Dual WAN Load Balance

我自己家裡只接了一條 12M/1M 的 ADSL 線路,本錢並沒粗到可以再多牽一條 ADSL 線,於是第二個 WAN port 自從買來之後就一直是當作 local port 來使用 (W2 沒接對外線路時,就會自動轉成 LAN port) 。直到最近看到有人這麼惡搞([新知]吼~Vigor 2910真是中階頻寬分享器中的首選啊~),我依樣畫葫蘆,沒想到竟然還真的接通了。

一般 ISP ADSL 線路都是配發 8 個動態 IP,或者是 1 個固定 IP + 7 個動態 IP。所以其實同時用同一組帳號密碼撥接,的確是都可以撥通取得 IP。所以我就調整了一下家裡網路的拓譜,如下:

拓譜

再將第二個 WAN port 設定為 PPPoE 取得動態 IP,如下:

Vigor 2910 Dual WAN setting

設定存檔後重新 Reset Vigor 2910,沒多久兩個 IP 就都正常取得。

Connection Status

不過想當然爾,降子並不會增加任何頻寬,只是善用 Vigor 的功能,同時惡搞你的 ISP 而已。

Syslog network traffic of Vigor 2910

從 Vigor 2910 剛買來就知道可以將網路流量 log 透過 Broso syslog 記錄下來,方式很簡單,在管理介面系統管理中將 syslogd server ip 設定上去即可。

設定上去後,/var/log/messages 果然就跑出來很多 2910 的 log。


[root@broso log]# tail -200f messages
Dec 7 22:53:31 my.router Vigor: Open port: 220.132.143.85:47549 -> 192.168.1.14:80 (TCP) Web
Dec 7 22:53:31 my.router Vigor: 459:44:35.110 wan->lan @S:R=13:1 p 220.132.143.85,47549 -> 192.168.1.14,www PR tcp len 20 48 -S 94932610 0 65535
Dec 7 22:53:35 my.router Vigor: WAN1 PPPoE ==> Protocol:LCP(c021) EchoReq Identifier:0x18Magic Number: 0x0 00 00 ##
Dec 7 22:53:36 my.router Vigor: WAN1 PPPoE <== Protocol:LCP(c021) EchoRep Identifier:0x18Magic Number: 0x1360 9b 98 ##
Dec 7 22:53:39 my.router Vigor: WAN1 PPPoE ==> Protocol:LCP(c021) EchoReq Identifier:0x19Magic Number: 0x0 00 00 ##
Dec 7 22:53:40 my.router Vigor: WAN1 PPPoE <== Protocol:LCP(c021) EchoRep Identifier:0x19Magic Number: 0x1360 9b 98 ##
Dec 7 22:53:43 my.router Vigor: WAN1 PPPoE ==> Protocol:LCP(c021) EchoReq Identifier:0x1AMagic Number: 0x0 00 00 ##
Dec 7 22:53:44 my.router Vigor: WAN1 PPPoE <== Protocol:LCP(c021) EchoRep Identifier:0x1AMagic Number: 0x1360 9b 98 ##
Dec 7 22:53:46 my.router Vigor: Local User: 192.168.1.14:80 -> 220.132.143.85:47549 (TCP) close connection
Dec 7 22:53:46 my.router Vigor: Local User: 192.168.1.12:1276 -> 220.132.143.85:80 (TCP) close connection
Dec 7 22:53:47 my.router Vigor: WAN1 PPPoE ==> Protocol:LCP(c021) EchoReq Identifier:0x1BMagic Number: 0x0 00 00 ##
Dec 7 22:53:47 my.router Vigor: WAN1 PPPoE <== Protocol:LCP(c021) EchoRep Identifier:0x1BMagic Number: 0x1360 9b 98 ##

但隨著時間越來越久,/var/log/messages 中紀錄太多了網路的 log,反而 messages 中該被注意的一些訊息被淹沒在茫茫 log 大海中,因此該想個辦法來將 log 分流到不同的檔案中。

在股溝中查了一下,得知 Vigor 系列的 router 基本上提供了下列的 device 來區分 log

  • local0: Firewall-Log
  • local1: VPN-Log
  • local2: User-Access-Log
  • local3: Call-Log
  • local4: WAN-Log
  • local5: ADSL Status & Traffic Statistics

於是便修改了 /etc/syslog.conf 如下


# Save Vigot 2910 Router network log

local0.*                                                /var/log/vigor/firewall.log

local1.*                                                /var/log/vigor/vpn.log

local2.*                                                /var/log/vigor/user-access.log

local3.*                                                /var/log/vigor/call.log

local4.*                                                /var/log/vigor/wan.log

local5.*                                                /var/log/vigor/adsl.log

重起了 syslogd 後,發現怎麼 /var/log/messaes 還是有 2910 的 log,再仔細察看了一下 syslog.conf,原來是第一行忘了將 local0~5 的 log,從 /var/log/messages 中濾除。修改如下:


*.info;mail.none;authpriv.none;cron.none;local0.none;local1.none;local2.none;local3.none;local4.none; local5.none /var/log/messages

重起 syslogd 後,果然 /var/log/messages 就已經不再出現 Vigor router 的 log 了。

Speeding up your web site

網站的回應速度快慢一直是攸關於使用者會不會停留下來繼續瀏覽最主要的關鍵。最近工作上也面臨到同樣的問題,網站回應速度不佳,客戶抱怨導致客群流失。除了提昇硬體容量跟頻寬這種暴力辦法之外(上級長官已經指示了,沒多餘預算可做容量提升),最後還是得回頭來看看系統面與 AP 面是否還有調整的空間。

Best Practices for Speeding Up Your Web Site 是 Yahoo 做效能調校時整理出來的 14 項 Rule,涵蓋了系統面與網頁程式開發時需注意的事項。各個 Rule 的細節這兒就不提了,有興趣的可自行至上述網址研讀即可。我僅針對 Rule 3 “Add an Expires Header” 拿來套用在 Broso Web 的設定,套用的結果的確效果顯著。

Broso 上的應用不外乎是部落格與相簿,所以網站上大部分都是靜態的圖檔、JavaScript、CSS。在沒有設定 Expires Header 之前,即使靜態圖檔內容並未改變,Browser 仍然會發個 Request 來 Broso Web 問問圖檔是否有更新。由於圖檔並未更新,於是 Apache 便會回覆 HTTP Result Code 304 (Not Modified),因此 Browser 便繼續使用 local cache 上的原圖檔來顯示。下面的資料是從 Fiddler 所節錄出來的:

當網頁中的小圖檔眾多時,Browser 所發出詢問圖檔是否更新的 Request 以及 Web Server 所回覆的 304 (Not Modified) Response,將形成嚴重的 overhead。如果確定大部分的靜態資料都是很久才會做更新,便可以針對這類型的資料設定 Expires Header。

HTTP 協定中 Expires 這個 header tag,是由 Web Server 回覆給 Browser。舉例如下:


HTTP/1.1 200 OK
Date: Sun, 25 Nov 2007 15:58:58 GMT
Server: Apache/2.0.61 (Unix) mod_watch/4.3
Last-Modified: Sat, 17 Nov 2007 04:16:21 GMT
ETag: “1e6f13-216e-2d712f40”
Accept-Ranges: bytes
Content-Length: 8558
Cache-Control: max-age=259200
Expires: Wed, 28 Nov 2007 15:58:58 GMT
Content-Type: image/jpeg

Expires 欄位指示這個靜態圖檔一直到 2007/11/28 15:58:58 以後才會過期,因此 Browser 在這個時間之前都不會再發出任何 Request 到 Web Server 來詢問圖檔是否更新,直接使用 local cache 中的圖檔來顯示,所以所有的 304 (Not Modified) Response 都可以省了,便可減輕 Web Server loading 與頻寬,Browser 的顯示速度也會更迅速。

在 Apache 2.0 要啟用 Expires Header,需使用 mod_expires module。預設設定此模組並不會啟用,需重新編譯,並透過 configure 設定需加入此模組,Apache2 才會具有處理 Expires Header 的能力。

重新編譯 Apache2 的方法可以參考先前的文章 – Apache Basic / Digest Realm Authentication,這次我重新編譯 Apache 時使用的 configure 參數如下:

[root@broso httpd-2.0.61]# ./configure –prefix=/usr/local/apache2 –enable-auth-digest –enable-deflate –enable-expires

編譯完畢後,apache2 就具有處理 Expires Header 的能力了,此時便可進行 httpd.conf 的設定了(mod_expires 的詳細語法可參考 Apache Module mod_expires),針對需要設定 Expires Header 的文件種類與預計過期的時間進行設定。


# mod_expire 針對下列 MIME type 設定 Expires header
ExpiresActive On
ExpiresByType image/jpeg “access plus 3 days”
ExpiresByType image/gif “access plus 3 days”
ExpiresByType image/png “access plus 5 minutes”

ExpiresByType image/x-icon “access plus 4 weeks”
ExpiresByType application/x-javascript “access plus 2 weeks”
ExpiresByType text/css “access plus 2 weeks”
ExpiresByType application/x-shockwave-flash “access plus 4 weeks”

設定完畢,重新啟動 Apache2 即可。

再用 Fiddler 來驗證一下 Expires Header 有沒有生效。首先記得先清除 Browser cache,再瀏覽相簿首頁。隨便找一個圖檔來看看 Expires Header 是否已經出現?

再次瀏覽相簿首頁,看看第二次 Browser 是否還會發出 Request 來詢問圖檔是否更新?

敗 Expires 之賜,Browser 已經知道圖檔尚未過期,因此便只會發出 jsp 的 Request 了。

重回 21 歲的年代

上上禮拜跟同事團購了一台 Wii 回來之後,就每天在家裡狂練網球,準備部門 11 月中的 Wii 運動大賽。倒是這個體適能測驗,一天限制只能測一次,第一次測就 34 歲,還蠻符合年紀的。沒想到剛剛心血來潮測試一次,竟然讓我重回了 21 歲的年代!趕快拍照留起來紀念 :p

Wii Fitness

Post blojsom blogs with Windows Live Writer

最近在 survey 新網銀廠商時,部落格剛好是新網銀功能上的一個需求項目,看到其中一家廠商使用 Windows Live Writer 來作部落格文章發佈的工具,看起來還蠻不錯的,於是便想來試試看。

安裝了 Windows Live Writer 後,依照安裝精靈的指示,發現 blojsom 這套 blog 套件並不在預設支援的清單中,不過幸好 blojsom 支援 MetaWeblog API (XML-RPC) 的介面,只要修改一下 properties,就可以將 XML-RPC 的遠端發佈功能啟動。

研讀了一下 blojsom 的相關說明,blojsom XML-RPC 的發佈網址為 http://your.blog.com/blojsom/xmlrpc/blog-id/,不過測試了一下,卻發生 404 Not Found。再檢查了一下,才發現原來我的 Apache 設定原先只有將 /blojsom/blog/* 才交給 Application Server 去處理,當然 /blojsom/xmlrpc 就會發生 Not Found的問題了。

修正問題後,果然 Windows Live Writer 就能正確的找到 隨想意誌,這篇文章就是用 Windows Live Writer 所編輯發佈的。

推薦大家試試 Windows Live Writer !!

Apache Digest Authentication – IE Workaround.

昨天設定好 Digest Realm Authentication 之後,測試過 IE7 / Firefox 2,看起來都沒什麼問題。結果今天到公司用 IE6 看的時候,竟然發現怎麼會有 400 Bad Request 錯誤..

Bad Request

查了一下子,才發現原來這是 IE 的 bug,原定身份檢核完畢後,任何連線 IE 都應該會自動帶上 Authorization 的 Header.

Authorization: Digest username=”cychien”, realm=”AWSTATS”, qop=”auth”, algorithm=”MD5″, uri=”/awstats/awstats.pl/”, nonce=”UBoBaJM3BAA=192135920c05c0d0ce0b89e69fbef6144b46ccad”, nc=00000002, cnonce=”a592556fde6ae1e828f360be6081d636″, response=”53580f5e52dd07e62ffa594865aeb1e2″

但碰到有 query string 的 URL 時,IE 就突槌了,摘錄 HTTP Header 資料如下就一切明瞭了

GET /awstats/awstats.pl/awstats.pl?framename=mainleft HTTP/1.1
….
….省略
Cookie: __utma=200320509.1007104159.1151628725.1187006067.1187006101.242; __utmz=200320509.1182908533.228.4.utmccn=(organic)|utmcsr=google|utmctr=%e9%9a%a8%e6%83%b3%e6%84%8f%e8%aa%8c|utmcmd=organic; phpbb2mysql_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22userid%22%3Bi%3A-1%3B%7D; control-commentControl=false; control-pluginControl=false; control-miscControl=false; control-mediaCastControl=false; rfolder-root=true; rfolder-??????=true; rfolder-??L???=true; __utmb=200320509; __utmc=200320509; JSESSIONID=GQGGcQPrYCQhzvCpyVKxJBGwmfNpy1cs2wXfy1bv1sgST9vSYyL1!-857858892

Authorization: Digest username=”cychien”, realm=”AWSTATS”, qop=”auth”, algorithm=”MD5″, uri=”/awstats/awstats.pl/awstats.pl?framename=mainleft“, nonce=”UBoBaJM3BAA=192135920c05c0d0ce0b89e69fbef6144b46ccad”, nc=00000003, cnonce=”8b98b9b1072e4c812443386f8363c07c”, response=”6d5c775889d9e631aed40cfafd19ce9a”

問題就出在 Authorization 的 uri 參數中,IE 的 bug 註定不會將 query string 附上,所以Apache 會認為與先前的 uri 不同,所以回覆 Bad Request.

針對微軟的老大心態,死就是不改他的 bug,所幸 Apache 從 2.0.51 之後也推出一組解決方案,藉以解決 IE query string 問題.

只要在 httpd.conf 中加上

BrowserMatch “MSIE” AuthDigestEnableQueryStringHack=On

只有針對 IE 瀏覽器,才會忽略 Authorization uri 參數的錯誤。經過測試果然有效。特別記錄一下..

Apache Basic / Digest Realm Authentication

最近想針對 Broso 特定系統統計功能做身份檢核的動作,於是稍微研究了一下針對 HTTP 協定中有關於身份驗證的機制。
HTTP 協定針對身份驗證分兩種模式,Basic Realm / Digest Realm。Basic Realm 僅將帳號密碼用標準 BASE64 來做編碼後,上送給 Web Server 來驗證,所以有心人其實可以透過 Sniffer 之類的軟體來進行側錄,再用 BASE64 解碼即可得知帳號密碼。

Digest Realm 則是為了解決上述 Basic Realm 的缺點,採用一般 Unix 儲存/驗證密碼的方式,每次瀏覽器要求連線,Web Server 會回覆一組隨機產生的 nonce value。瀏覽器則將帳號/密碼/nonce/GET(or POST)以及 URI 等參數,依指定的 hash function 做成訊息摘要( Digest),再將 Digest 上傳到 WebServer 驗證,如此一來上送的 Digest 每次皆會不同,藉以避免被有心人士所側錄。

以上可參考 RFC 2617 – HTTP Authentication: Basic and Digest Access Authentication

Apache 已經實作上述兩種機制,mod_auth 模組僅支援 Basic Realm。而 mod_auth_digest 則是支援 Digest Realm。不過如果 Apache 是抓預先編譯好的的 binary,或是編譯時未特別指定,那麼預設是不包含 mod_auth_digest 模組。

步驟一:重新編譯 APACHE.

由於我先前的 Apache 2.0.55 並未特別指明要啟用 mod_auth_digest,於是我重新下載 Apache 2.0.59 回來重新編譯。
執行 configure 指令如下

./configure –enable-auth-digest –prefix=<APACHE_INSTALL_DIR>

如此編譯時就會自動將 mod_auth_digest 加入。接著作 make, make install 就完成了。

步驟二:產生 Digest 帳號密碼檔

接下來先產生一組帳號密碼設定檔,每組帳號密碼都需針對特定的 realm 獨立設定。需使用 <APACHE_INSTALL_DIR>/bin/htdigest 指令來產生密碼檔。
指令格式

<APACHE_INSTALL_DIR>/bin/htdigest -c <path>/<digest_password_file_name> <realm name> <user id>

-c 代表要產生一個新的密碼檔,如果檔名已經存在,就會被覆蓋。所以如果想繼續增加新的帳號密碼,就無須加上 -c 即可
後面接上密碼檔的路徑與檔名,以及要檢核密碼的 “領域(realm)” (意指瀏覽器 popup 視窗,提示輸入帳號密碼時,上面顯示的名稱),最後是帳號名稱
之後 htdigest 會詢問兩次密碼後就完成建立密碼檔。

例如:我要針對 /mymrtg 與 /awstats 兩個目錄進行身份檢核,就需針對這兩個領域來建立帳號密碼

htdigest -c <somewhere>/digestpasswd “MYMRTG” <user_id>
htdigest <somewhere>/digestpasswd “AWSTATS” <user_id>

屆時瀏覽器提示帳號密碼輸入時,就會顯示目前要您輸入的領域是 MYMRTG 或是 AWSTATS

步驟三:調整 httpd.conf

針對每個要作身份檢核的的領域作設定

<Directory “<somewhere>/mymrtg”>
   AuthType Digest → 指定使用 Digest Realm Authentication
   AuthName “MYMRTG” → 指定領域名稱
   AuthDigestFile <somewhere>/<digest_password_file_name> → 指定帳號密碼檔路徑與檔名
   Require user <allowed user id> → 這裡指定允許使用的 user id

   …
   …
</Directory>

設定完畢重起 Apache 即可

圖片盜連進階版

續上篇 防賊妙招!如何防止圖片被小偷盜連?

後來發現部分圖片是我自己發佈在一些我常去的討論區,或者是從股溝大神搜尋結果中連結過來的,以及直接在網址列打入網址時,Referer 會是空白。所以特別把上面這些情形給開放了。

設定調整如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 防止人家盜連圖片, 擋 gif, jpg,png
SetEnvIfNoCase Referer "^http://broso\.twbbs\.org/" local_ref=1
SetEnvIfNoCase Referer "^http://www\.mobile01\.com/" external_ref=1
SetEnvIfNoCase Referer "^http://www\.play01\.com/" external_ref=1
SetEnvIfNoCase Referer "^http://www\.google\.com/" external_ref=1
SetEnvIfNoCase Referer ^$ blank_ref=1

<FilesMatch "\.([Gg][Ii][Ff]|[Jj][Pp][Gg]|[Pp][Nn][Gg] )$">
  Order deny,allow
  Deny from all
  Allow from env=local_ref
  Allow from env=external_ref
  Allow from env=blank_ref
  ErrorDocument 403 /thief.giff
</FilesMatch>

另外,還加了一個小圖,如果盜連圖片的人網頁上就會出現小偷的圖示 😛
小偷

嘿嘿..再繼續盜連沒關係])
圖片盜連