2014年1月24日 星期五

[Linux] Nginx 提供 localhost 不受 authorization 限制 @ Ubuntu 12.004

最近用 nginx 架設服務時,採用 HttpAuthBasicModule 限制存取時必須認證才行,然而,偶爾還是希望某些特定 IP 可以不受限制,研究一下是可行的:

http://nginx.org/en/docs/http/ngx_http_core_module.html#satisfy

syntax: satisfy all | any;
default:
satisfy all;
context: http, server, location

Allows access if all (all) or at least one (any) of the ngx_http_access_module, ngx_http_auth_basic_module or ngx_http_auth_request_module modules allow access.


因此,就只需在特定的 location 中,加上上述敘述即可:

location ^~ /service/ {
satisfy any;

# ngx_http_access_module
allow 127.0.0.1/32;
deny all;

# ngx_http_auth_basic_module
auth_basic "Restricted Area";
auth_basic_user_file    htpasswd;

# …
}

2014年1月23日 星期四

阿里雲初體驗

AYCloud00

中國發展快速,至今共有「阿里雲」、「騰訊雲」、「沃雲」等,先來試試阿里雲吧!目前可以申請五天免費試用,並且綁在淘寶帳號,當然,最重要的金流都弄妥了。

AYCloud10

AYCloud11

申請測試需要一點時間,過程中可能會有電話照會等,作業系統共有 Aliyun linux、CentOS 、Debian、Ubuntu、Windows Server 可以選擇,此例採用 Ubuntu 12.04 64Bit,最後建立起的機器 root 帳密會用簡訊通知,最便宜的一檯是一個月 55 RMB,更多細節可直接去逛逛 http://buy.aliyun.com/。未來就只需在阿里雲網站登入->我的阿里雲 -> 管理控制台:

AYCloud02

接著從「雲服務器ECS」進去:

AYCloud03

界面面跟 AWS EC2 的配置差不多,左邊選單,點一點可以看到目前運行列表:

AYCloud04

AYCloud05

接著會顯示"遠端登入"方式:

AYCloud06

顯示硬碟資訊:

AYCloud07

對硬碟進行 snapshot:

AYCloud08

顯示製作進度:

AYCloud09

disk snapshot 做完後,可以在做鏡像管理(開啟新機器時的選擇鏡像來源):

AYCloud10

AYCloud11

至於網路方面,從臺北 ping 青島的機器,晚上大概 290 ms 的反應時間,早上約 410ms。由於免費試用網路速度最高只能拉到 5Mbps ,若願意在測試的話,可以再加錢,最多調到 200Mbs。

AYCloud12

此外,阿里雲還有提供「雲盾」服務:

AYClod12

AYCloud13

AYCloud14

AYCloud15

以上就是簡單的把玩。

2014年1月22日 星期三

[Linux] MongoDB 與 PyMongo 初體驗 @ Ubuntu 12.04, Linode

架設:

http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
$ echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
$ sudo apt-get update

http://www.mongodb.org/downloads
$ sudo apt-get install mongodb-10gen=2.4.9
$ echo "mongodb-10gen hold" | sudo dpkg --set-selections

$ sudo service mongodb restart
mongodb stop/waiting
mongodb start/running, process ######

$ mongo
MongoDB shell version: 2.4.9
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user


防火牆存取限制:

$ sudo iptables --list-rules
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

$ sudo vim /etc/init.d/iptables-rule.sh
#!/bin/sh

# BIN
BIN_IPTABLES=`which iptables`

# reset rules
$BIN_IPTABLES -F
$BIN_IPTABLES -X
$BIN_IPTABLES -Z

# init policies
#$BIN_IPTABLES -P INPUT DROP
#$BIN_IPTABLES -P OUTPUT ACCEPT
#$BIN_IPTABLES -P FORWARD ACCEPT

# mongo db
$BIN_IPTABLES -A INPUT -j ACCEPT -p tcp --destination-port 27017 -s 127.0.0.1,IP1,IP2,IP3
# mongo db drop all
$BIN_IPTABLES -A INPUT -j REJECT -p tcp --destination-port 27017

$ sudo chmod 775 /etc/init.d/iptables-rule.sh
$ sudo update-rc.d -f iptables-rule.sh defaults


一些 mongo 常用指令:

顯示所有的 databases (SQL: show databases)
> show dbs

使用指定 collection (SQL: use dbname)
> use dbname

顯示目前 databases 中的所有 collections (SQL: show tables)
> show collections

更多對照指令:
SQL to MongoDB Mapping Chart
PHP: SQL to Mongo Mapping Chart


安裝 pymongo 套件:

$ git clone git://github.com/mongodb/mongo-python-driver.git pymongo
$ cd pymongo
$ sudo python setup.py install


使用 pymongo 新增範例:

from pymongo import MongoClient

client = MongoClient()
database = client[‘dbname’] # SQL: Database Name
collection = database[‘table’]   # SQL: Table Name

item = {"author":"changyy"}
collection.insert(item)


[SQL] MySQL: Insert or update @ Ubuntu 12.04

最近把玩 MySQL 了一下,想要做一些 daily result snapshot 的部分,想說就把結果存到一張表中使用,這樣下去就真的變成純玩 SQL 的生活了 XD

此時就會碰到把新增及更新的需求,好家在 MySQL 真威,筆記一下:

http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

mysql> INSERT INTO TableName ( Filed1, Filed2 ) VALUES ( 'Value1', 'Value2' ) ON DUPLICATE KEY UPDATE Field1=VALUES(Field1);

不過這次玩的比較多一點:

mysql> INSERT INTO TableName ( Filed1, Filed2 ) 

 SELECT Field1, Field2 FROM TableName2 

 ON DUPLICATE KEY UPDATE Field1=VALUES(Field1);

2014年1月21日 星期二

[Linux] CodeIgniter on Nginx : site_url, base_url use https @ Ubuntu 12.04

在 nginx 上跑 CodeIgniter 時,使用 site_url 、 base_url 卻會產生 https 的連結出來,此現象是因為 CodeIgniter 是透過 $_SERVER['HTTPS'] 判斷所造成的,解法就是設定 Nginx PHP 的環境參數(fastcgi_param  HTTPS  off),在 /etc/nginx/fastcgi_params 可看到這樣的定義:

fastcgi_param  HTTPS  $https;

暫時偷懶解法 (/etc/nginx/sites-available/default):

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param  HTTPS off;
}