1、nginx改變編譯選項,或增加模塊
niginx -V 可見版本信息,以及目前的編譯信息
重新configure make make install 會覆蓋安裝,但不會覆蓋nginx.conf
2、設置用戶變量
set $a ‘hi’;
(set會在進入{}時執行,類似js中預加載)
3、安裝echo組件,在編譯時,加上--add-module=/path…
http://wiki.nginx.org/HttpEchoModule#Installation
4、服務器內部跳轉location間set的變量是互相可見的,以一個請求為生命周期。
location /a {
set $a 'hi';
rewrite ^ /b; //內不跳轉,不是301、302,瀏覽器端無察覺
}
location /b {
echo $a; //可見
}
5、一些nginx預設變量
http://localhost/soda?xx=xiaoxuan
$uri '/soda' (經過解碼,不含參數)
$request_uri '/soda?xx=xiaoxuan' (原始請求,未解碼,含參數)
$arg_xx ‘xiaoxuan’ (對應參數key的值)
$http_xx (請求頭中的變量群)
$cookie_xx (cookie變量群)
$send_http_xx (相應頭中的變量群)
6、不要set nginx 自建變量的值,會出現崩潰或未知錯誤(少數變量除外,如args)
對args的重新set值,會影響部分變量。
-- 不會影響$uri, $request_url
-- 會影響$arg_xx
eg:
location /soda{
set $org_arg_a $arg_a;
set $args 'a=1';
echo 'org a : $org_arg_a';
echo 'a : $arg_x';
}
out :
curl 'http://localhost/soda/a=6'
org a : 6
a : 1
7、對$args的改寫會影響proxy_pass
8、nginx對變量的讀取,有兩種:indexed or unindexed
比如$args $ary_xx就是unindexed,即用的時候才去那塊靜態內存讀取實時的值(可能已經被改寫),類似的還有$cookie_xx
9、map
-- 僅在http段內使用
-- 僅用到map的變量時才會映射(惰性求值),並且僅第一次用到時映射並緩存,后續對變量值的更改,不會影響之前映射的值
eg:
http{
map $args $foo {
default 0;
soda 1;
}
server {
listen 80;
location /soda {
set $org_foo $foo;
set $args 'soda';
echo '$org_foo : $org_foo';
echo '$foo';
}
}
}
curl 'http://localhost/soda?soda'
1 : 1
1
curl 'http://localhost/soda?xx'
0 : 0
0
加載時,用到$foo變量(惰性,如果不用則不map),去map變量並緩存,然后set $args已經沒用的
10、主動求值
set $a '$b $b';
這句則會在‘預加載’的過程就求值,而不是用到時才去惰性求值
ps:此文是對 http://blog.sina.com.cn/s/articlelist_1834459124_0_1.html 學習的總結