在 Nginx 中如何獲取當前時間戳?
02-10
我想使用Nginx的echo模塊,請求過來後直接返回一個時間戳,不經過後端的fastcgi,但是找了半天也沒找著Nginx裡面有表示當前時間的內置變數。$time_local,這個貌似在日誌里才有用,在echo模塊後面使用就報沒有這個變數的錯。
在ngx_http_log_module的log_format(http://wiki.nginx.org/HttpLogModule#log_format)中提供的變數可以理解為內置變數,只有在對log格式進行制定時才可以使用。對此,我覺得可能是因為在NGX_HTTP_LOG_PHASE階段對請求的處理其實已經結束,所以作者在設計時覺得沒有必要把這些變數作為常規變數暴露出來。
我知道以下的模塊或項目可以訪問到nginx的時間變數。- ngx_time_var(http://bit.ly/zfAskP),如果你的需求不複雜,它可以勝任。
- ngx_set_misc (http://wiki.nginx.org/HttpSetMiscModule#set_local_today),提供了yyyy-mm-dd格式的日期。
- ngx_lua(https://github.com/chaoslawful/lua-nginx-module),其中提供了和時間相關的api。
- Tengine(http://tengine.taobao.org/document_cn/variables_cn.html),官方微博上說這些變數是為了實現按時間自動切割日誌保留的。
PS:大部分nginx時間相關的api在src/core/ngx_times.h,裡面時間相關的變數都是緩存過的,可以避免系統調用。
可以考慮用一下Tengine,它增加了很多變數,比如$year $month $day $hour $minute $second等http://tengine.taobao.org/index_cn.htmlhttp://tengine.taobao.org/document_cn/variables_cn.html
獲取時間的函數有很多,ngx.today(), ngx.time(), ngx.utctime(), ngx.localtime(), ngx.now()這些都很常用,ngx.now()這個函數返回的是時間戳的秒數,*1000就是毫秒了
可以用ssi模塊的$date_gmt指令echo模塊的echo指令實現,比如:location = /time {ssi on;echo $date_gmt;
}
echo指令需要重新編譯nginx加入HttpEchoModule。$date_local
src/unix/ngx_time.h
推薦閱讀:
※CentOS 7 YUM 10分鐘快速安裝 LNMP 環
※[轉載]Nginx防蜘蛛爬蟲處理
※Nginx 與 PHP 合併部署與分開部署 哪種性能更好一些?
※微軟的 Web 伺服器為何能屹立不倒?
※為什麼 node.js 的官網不用 node.js 而用 nginx 搭建?
TAG:Nginx |