在我們使用 squid 的環境裡,常常遇到一個瓶頸,就是面對高 I/O 的環境底下,整個系統的效能表現會變的特別差,如果看系統的 CPU 線圖會如下(下圖爲 cacti 畫的日圖):
大腸鏡檢查 - 輝雄診所
每年九月一到就是年度的健康檢查,大概大家都是一片哀嚎 XD 不過其實也還好似乎年紀越大紅字越多好像是正常的,其實每年也沒什麼要注意的,我都只注意 GOT, GPT 而已,其他的向來都不會紅字,不過不幸的今年健康檢查竟然紅字出現在一個不可思議的地方…糞便潛血反應,當下的表情已經不是「囧」可以表現的了。既來之則安之,當下想的就是乖乖照大腸鏡,準備被「月工」吧 = =
popclip upgrading to Mountain Lion
最近把 MacBook Pro 從 OS X 10.7 (aka. Lion) 升級成 OS X 10.8 (aka. Mountain Lion) 之後,大部分的軟體都還蠻無痛升級的,其中 PopClip 在升級之後就開始秀逗秀逗,在 Safari 裡面有時 Work 有時不 Work (就是不太靈敏-偶爾會出現彈出選項,偶爾又沒有),官方有一個解決方法是把原本的設定刪除掉讓她重新產生即可。步驟如下
nginx cache - last step of optimization
最近在把敝單位的 Web Server 從原本的 lighttpd 轉換成 nginx,當然除了複雜的 rewrite rule 要寫,還有就是想盡量榨出 nginx 的效能及所有功能,而 nginx 除了很多參數可以調整之外當然也有更多內建的功能有點類似現在的 All-in-One 小巧但是功能完整!
調整了很多參數之後,說實在的也不知道有什麼可以調整了,查一查網路發現:對呀! nginx 有 cache 的模組可以用阿,因為這次轉換的機器有 php 的部分,而且大部分是出圖跟利用 php 來做 javascript 模組的合併(就是所謂的 combo loader),這些幾乎都是做一次就不會在更改結果的,所以就查了一下 nginx 的 fastcgi cache 的設定:
在 http
的 section 加入
fastcgi_cache_path /dev/shm/cache/ levels=1:1 keys_zone=PHP:8m inactive=60m max_size=256m;
然後在 location ~ \.php$
的 section 裡面加入
squid nginx http1.1 gzip
在 nginx 中要啟用 gzip 非常簡單,只要在 http 的段落裡面加入
gzip on;
gzip_http_version 1.0;
gzip_comp_level 9;
gzip_proxied any;
gzip_min_length 1400;
gzip_types text/css application/x-javascript text/javascript;
gzip_vary on;
但是加了之後,因為我們前端還有先過 squid,結果發現怎麼有的 css 檔就是沒有被 gzip,但是有些 js 檔卻又有,在網路查到原來是還要在 squid.conf 加入
cache_vary on
broken_vary_encoding allow all
這是因為啟用 gzip 後,HTTP Header 也會加入 Vary:Accept-Encoding
,加了上面的設定才可以讓 squid 保存 gzip 的內容,不會很自作聰明的解壓縮在傳給 client 端,不過網路另有一說是因為 squid 不是完整的支援 HTTP1.1 的 protocol,所以在面對 gzip HTTP1.0 跟 HTTP1.1 的版本的時候就會有問題,不過我有在 nginx 加了 gzip_http_version 1.0
了還是一樣有問題,加了那兩行才 ok。
ifconfig.me - the web ifconfig
前幾天公司同事在問我們的機器出去的 public ip 是多少,突然發現原來大家好像都不知道有一個方便的網站可以查,對於會 Unix 的來說網址是在好記不過了,就是跟 Unix 看 ip 的 ifconfig
同樣的名稱 http://ifconfig.me
ifconfig.me 可以取得你現在 ip 資訊的網站,不過他跟一般顯示 ip 的網站不同的是他功能比較強!
除了會顯示一些基本的資訊
他還支援了不同的網址只顯示需要的部分,比方說我們可以在 Terminal 打 curl ifconfig.me/ip
就會得到 61.219.37.20
,又或者 curl ifconfig.me/port
就可以知道本地端出去的 port 51081
,如果有經過 Proxy 的話 curl ifconfig.me/forwarded
還會顯示 61.219.66.125, 172.30.4.166, 61.219.37.20
甚至更有趣的是他也支援 XML / json ,網址分別是 http://ifconfig.me/all.xml 與 http://ifconfig.me/all.json 詳細的內容可以看 [ifconfig.me](http://ifconfig.me %}
使用 vGhetto 管理 VMware vCenter
vGhetto 是一個由社群主導的專案,主要的目的當然是簡化管理 VMware 的工作,不用使用最原始的 vmrun
這個指令或者 Perl SDK 做管理,整個專案放在 SourceForge,到 專案頁面 下載,抓下來的目錄長這樣 (或者直接用 svn co https://vghetto.svn.sourceforge.net/svnroot/vghetto vghetto
也可以)
.
./INSTALL
./TODO
./bitmaps/
./build/
./demo/
./installers/
./other/
./scripts/
./vGhetto.pl*
./wbin/
其中的 scripts 資料夾就是放置管理用 script 的地方,裡面是一堆 .pl 的 perl 檔案
設定 SPF 跟 DomainKeys 在 postfix 和 tinydns
部門最近有架 Mail Server 的需求,要架 Mail Server 首先要搞定不讓自己寄出去的信被當作 Spam,參考 Google 的 電子郵件驗證 中說的,要可以被 驗證和識別,通常就是 Domain 要發佈 SPF 跟簽署 DKIM(DomainKeys Identified Mail) 或最古老的 DomainKeys,不過有了 DKIM 後原本單純 DomainKeys 就被廢棄了(當然目前還是可以用的)。我們單位用的 mail server 是 Postfix 而 DNS 則是 tinydns (djbdns %}
設定 SPF
SPF 只是簡單的 DNS TXT 發佈而已,可以利用 easySPF 製作。於是在 tinydns 的設定檔加入下列資訊:
'foo.bar:v=spf1 ip4\07211.22.33.44/32 ~all:600
這裡用 foo.bar
當作 domain,而 11.22.33.44
則是 Server 寄信出來的 public ip,這樣子就完成啦~
我們用 dig TXT foo.bar @8.8.8.8 +tcp
可以觀察到
;; ANSWER SECTION:
foo.bar. 600 IN TXT "v=spf1 ip4:11.22.33.44/32 ~all"
設定 DKIM
Server 收到 SYN packet 後沒有 SYN/ACK 回應
這是最近管發生的怪現象,就是公司某個單位一直跟我們說他們的 Server 要連我們的 Server,結果我們這邊時好時壞,… 什麼?! 我們這邊時好時壞? 從沒有聽過用戶說我們的 Server 連不上阿,於是就跟他們一起 Debug,開了 tcpdump
來看,發現我們這邊的確有時候收到 SYN 結果就不回 SYN/ACK kernel 直接 drop 封包 XD 這是什麼鬼,kernel 也太不聽話了,不過我們這邊 kernel 沒有打開 iptables 也沒有什麼 drop 封包的規則,於是就 Google 了一下,原來有人跟我們遇到一樣的狀況 Why would a server not send a SYN/ACK packet in response to a SYN packet
簡單的來說跟我們一模一樣,隨機的不回 SYN ,根據那篇文章說的,解法有下列兩種:
- 關掉 client 的 tcp window scaling
不過這個顯然不是什麼好的方法,因為我們不能限制 client 阿
- 關掉 server 的 tcp window scaling 跟 tcp timestamps
看起來是因為 client 送的 tcp window size 不被 server 接受所以就 drop 掉,可是為什麼是 SYN 就被 drop 實在是不可得知。不過我們的 Server 後來加了以下設定後的確就好了:
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 0
參考資料: