The original version of nginx does not support write HTTP access log to pipe. It was not so flexible for managing logs with cronolog or scribe. The author of nginx (Igor Sysoev) said that the feature will not be in any future version of nginx. 

In 2011, The Taobao group in China just released their version of nginx, named Tengine. We take their patch, get the code corresponding to pipe only, and generate a patch file:  from Github

You can clone this Branch to compile, too.

Usage:

access_log "pipe:/usr/local/bin/cronolog /data/logs/access-%Y-%m-%d.log" combined

Attention: if the piped program dead, log will be written to the default log file, not re-open the pipe just as Apache. If you use a unstable logger (e.g. log to network), setting another access log file is recommended to avoid the loss of access log. 

Posted by PIXNET Lab at 痞客邦 PIXNET 留言(0) 引用(0) 人氣()

原本的 nginx 是不支援把 access log 寫到 pipe 的,對於應用 cronolog 來 rotate log 或是 scribe 來收集 log 之類的用途比較不方便。nginx 作者也說了不會增加這個功能。剛好中國大陸的淘寶將他們所使用並且修改過的 nginx 版本(稱作 Tengine)open source,於是整理了一下,只取出跟 pipe 有關的程式,patch 回原本的 nginx (1.0 stable branch) 上。

Patch 可以在 Github 下載。也可以直接把 這個 Branch clone 下來編譯。

使用方法大致如下:

access_log "pipe:/usr/local/bin/cronolog /data/logs/access-%Y-%m-%d.log" combined

如果 pipe 另一端死掉的話,log 會寫入預設的 log file,不會像 Apache 一樣重新開啟新的 pipe。如果使用比較不穩定的 logger,建議另外多設定一個 access_log 到檔案避免 log 遺失。

Posted by PIXNET Lab at 痞客邦 PIXNET 留言(0) 引用(0) 人氣()

用 MySQL 開發的時候,如果 collation 選擇 utf8_general_ci,比較字串(使用等號 =)的時候大小寫的不同會被視為一致,但是 SQLite 並不會。解決的方法是加上 COLLATE NOCASE

可以在 SELECT 的時候把 COLLATE NOCASE 擺在 LIMIT 1 前面:


SQLite version 3.7.7.1 2011-06-28 17:39:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE `users` (`id`, `user_name`, `email`);
sqlite> INSERT INTO `users` (`id`, `user_name`, `email`) VALUES (1,
'Repeat', 'REPEAT@example.com');
sqlite> INSERT INTO `users` (`id`, `user_name`, `email`) VALUES (2, 'repeattest1', 'repeattest1@example.com');
sqlite> SELECT * FROM `users` WHERE `user_name` = 'repeat';
sqlite> SELECT * FROM `users` WHERE `user_name` = 'Repeat';
1|Repeat|REPEAT@example.com
sqlite> SELECT * FROM `users` WHERE `user_name` = 'REPEAT';
sqlite> SELECT * FROM `users` WHERE `user_name` = 'REPEAT' COLLATE NOCASE;
1|Repeat|REPEAT@example.com
sqlite> SELECT * FROM `users` WHERE `user_name` = 'repeat' COLLATE NOCASE;
1|Repeat|REPEAT@example.com
sqlite> SELECT * FROM `users` WHERE `user_name` = 'repEat' COLLATE NOCASE;
1|Repeat|REPEAT@example.com
sqlite> SELECT * FROM `users` WHERE `user_name` = 'repEat' COLLATE NOCASE LIMIT 1;
1|Repeat|REPEAT@example.com
sqlite> SELECT * FROM `users` WHERE `user_name` = 'repEat' LIMIT 1 COLLATE NOCASE;

另外在 CREATE TABLE 的時候做 COLLATE NOCASE 也可以:


SQLite version 3.7.7.1 2011-06-28 17:39:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE `users` (`id`, `user_name` TEXT COLLATE NOCASE,`email` TEXT);
sqlite> INSERT INTO `users` (`id`, `user_name`, `email`) VALUES (1, 'Repeat', 'REPEAT@example.com');
sqlite> SELECT * FROM `users` WHERE `user_name` = 'repeat';
1|Repeat|REPEAT@example.com
sqlite> SELECT * FROM `users` WHERE `email` = 'repeat@example.com';
sqlite> SELECT * FROM `users` WHERE `email` = 'REPEAT@example.com';
1|Repeat|REPEAT@example.com

參考資料:http://www.sqlite.org/faq.html#q18

, ,

Posted by PIXNET Lab at 痞客邦 PIXNET 留言(0) 引用(0) 人氣()

oEmbed 是一個讓第三方站台更方便地顯示網站各種資源的 API,提供 JSON 與 XML 格式,讓第三方網站不需要去 Parse 整個 HTML。例如,給定一個 PIXNET 相片 URL:http://emmademo.pixnet.net/album/photo/467720

會傳回如下的格式:

{

}

範例 API URL: http://api.pixnet.cc/oembed?url=http%3A%2F%2Femmademo.pixnet.net%2Falbum%2Fphoto%2F467720&format=json

目前 YouTubeWordpressFlickr 等網站都有支援,痞客邦 PIXNET的相簿、相片、部落格文章也於日前支援了 oEmbed API,但目前暫時不支援指定縮圖(thumbnail)大小的功能。

另外,您可以在支援的 URL 頁面中看到以下的 <link> tag:

<link rel="alternate" type="application/json+oembed" href="http://api.pixnet.cc/oembed?url=http%3A%2F%2Femmademo.pixnet.net%2Falbum%2Fphoto%2F467720&format=json" title="PIXNET oEmbed Profile">

, , ,

Posted by jnlin at 痞客邦 PIXNET 留言(0) 引用(0) 人氣()

「自訂文章網址」是 PIXNET 痞客邦 部落格最近新增的一項對 SEO 有幫助的功能,對於想要提高部落格搜尋引擎流量的格主來說,可以看這邊的說明來打開這個功能。

什麼是SEO?

SEO(搜尋引擎最佳化)是利用某些方法,讓網頁在搜尋引擎的結果頁中的排名提高,以增加從搜尋引擎來的流量的方式。由於大部分的網路使用者在搜尋的時候,只會點選結果頁中排名前幾名的網站,所以想辦法讓搜尋引擎的排名變好,是一個很好的帶來人氣的方式。

其中,在文章網址加入與文章標題,或是英文標題都是很好的 SEO 方式。

如何在痞客邦部落格中自訂文章網址?

請先至 部落格後台 > 部落格管理 > 基本進階設定 > 進階設定 > 部落格相關設定,找到「文章網址加入標題」的欄位:
網址出現文章標題1.png
您可選擇為
1. 依單篇文章設定:有在單篇文章中設定標題的文章,網址後面才顯示標題。
2. 預設顯示文章標題:所有文章網址後面都顯示該篇文章的標題,您也可自行修改成想要顯示的其他文字。

選完儲存後,發表文章頁面下方即會多出「文章網址」欄位:
網址出現文章標題2.png

按下「編輯」按鈕來編輯您想要顯示在文章網址後面的標題:
網址出現文章標題3.png
1. 於輸入框中自行輸入想顯示的文字。或是
2. 按下「網址帶入文章標題」按鈕,直接將文章標題帶到輸入框中。

待文章發表後,網址後面就會出現你剛剛所設定輸入的文字囉!
網址出現文章標題4.png 

Posted by jnlin at 痞客邦 PIXNET 留言(1) 引用(0) 人氣()

看圖說故事:

IPv6 in Taiwan  

資料來源:自從 2010 年 11 月以來痞客邦 PIXNET 提供 IPv6 的連線方式所統計的資訊。

, ,

Posted by jnlin at 痞客邦 PIXNET 留言(0) 引用(0) 人氣()

前言

Identify and Access Management(後面簡稱IAM)的出現是管理員的一大福音,讓雙A(authentication, authorization)的管理變的簡單又輕鬆,前陣子IAM終於也出現在web console了,大概除了logging之外沒有可挑剃的地方了吧?管理員通常會使用IAM幫你建帳號開權限,然後丟給你AWSAccessKeyId和AWSSecretKey!這組key pair可以讓你透過sdk使用EC2的資源,不過如果只是簡單要launch instance或者describe running instance這些簡單的動作,自已寫code有點麻煩,除此之外還有什麼方法?據我所知有兩種方法:

  1. IAM User sign-in URL,管理者必需先設定AWS Account Alias,然後替你設定密碼才可以使用,e.g. https://<alias>.signin.aws.amazon.com/console
  2. Elasticfox Firefox Extension for EC2

這兩種方法都各有缺點:

  1. IAM sign-in URL等於是開了一扇門讓不懷好意的人可以try密碼,如果沒有MFA保護,通常不會開啟IAM sign-in URL,尤其是具有管理權限的帳號。
  2. Elasticfox目前並不支援Firefox 4,可以利用Add-on Compatibility Reporter來強制使用,如果灌用的browser不是firefox時,還要另開一個Firefox來吃memory實在說不過去。

有沒有第三種方法?我直覺想到官方的ec2-api-tools,ec2-api-tools需要X.509憑證,但我們只有key pair,它的cli command沒有key pair的選項,原本以為這條路不通,沒想到只需要轉個彎就可以使用,這個彎簡單說就是管理員必需允許user上傳X.509憑證(UploadSigningCertificate),在這邊介紹第三種方法,也就是本文的主題。


產生X.509憑證

首先需先生出一把rsa private key.

openssl genrsa 2048 -out private-key.pem

然後透過這把private key產生X.509憑證,需要填寫一些資料,不太清楚該欄是幹麻的話可以參考如何填寫憑證申請書

openssl req -new -x509 -nodes -sha1 -days 730 -key private-key.pem -out cert.pem


設定IAMCli

先下載IAMCli

wget http://awsiammedia.s3.amazonaws.com/public/tools/cli/latest/IAMCli.zip

unzip後可以稍微看一下README,把環境變數AWS_IAM_HOME、JAVA_HOME設好,可以把設定加入shell config file可以省去每次都要設的功夫。

unzip IAMCli.zip
export JAVA_HOME=/usr/local/diablo-jd-1.6.0
export AWS_IAM_HOME=<your/IAMCli/path>

把環境變數AWS_CREDENTIAL_FILE指到一個設定檔,該設定檔必需有AWSAcessKeyId和AWSSecretKey,這邊以IAMCli的aws-credential.template為例

cp aws-credential.template ~/.aws-credential
vi .aws-credential #設定AWSAcessKeyId、AWSSecretKey
chmod 600 .aws-credential
export AWS_CREDENTIAL_FILE=~/.aws-credential

 

上傳憑證

iam-useraddcert -u <user> -f <x509 cert的路徑>

成功後會回傳cert id,這個不用記,後面可以用iam-userlistcerts列出來,iam-userdelcert刪除


設定ec2-api-tools

export EC2_HOME=~/where/to/ec2-api-tools
export EC2_PRIVATE_KEY=<剛剛產生的private key位置>
export EC2_CERT=<剛剛產生的cert位置>

用ec2din測試一下沒問題就okay了


地雷區

  1. 所有的範例都是rsa,使用dsa可以上傳,但ec2din時會噴錯誤。

 

Reference

  1. Creating and Uploading Server Certificates #這是Server Certificate,但前面產生X.509的部份可以參考
  2. Playing with AWS Access Identity Management
  3. 如何製作 SSL X.509 憑證? 

, ,

Posted by gasol at 痞客邦 PIXNET 留言(0) 引用(0) 人氣()

IMG_1526.JPG IMG_1528.JPG IMG_1535.JPG IMG_1539.JPG IMG_1537.JPG
IMG_1542.JPG IMG_1547.JPG IMG_1545.JPG IMG_1544.JPG IMG_1556.JPG
IMG_1563.JPG IMG_1564.JPG IMG_1538.JPG IMG_1572.JPG IMG_1541.JPG
IMG_1551.JPG IMG_1554.JPG IMG_1557.JPG IMG_1566.JPG IMG_1562.JPG
AWS in Taipei Developer Party 共 115 張相片

Posted by jnlin at 痞客邦 PIXNET 留言(0) 引用(0) 人氣()

Posted by jnlin at 痞客邦 PIXNET 留言(0) 引用(0) 人氣()

Posted by jnlin at 痞客邦 PIXNET 留言(0) 引用(0) 人氣()

1 234