標籤:

在 Nginx 中如何獲取當前時間戳?

我想使用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.html

http://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 |