以ISO-8601 Nginx格式获取当前时间

时间:2017-10-12 08:06:15

标签: nginx

有没有办法在nginx中获得ISO-8601格式的当前时间 我想在标题中添加时间。 提前谢谢

1 个答案:

答案 0 :(得分:0)

在 nginx 中,您可以简单地使用变量 $time_iso8601 来访问当前时间。

如果您希望日期时间将此日期(iso8601 格式)格式化为任何所需的格式,您可以通过 map 方法将正则表达式与 nginx http 模块一起使用。

请参阅此处以了解有关 nginx http module 注意:您只能在 http 模块内映射。

我在这里分享一个示例 nginx.conf 代码以供参考和更好地理解

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

    events {
        worker_connections 768;
        # multi_accept on;
    }

    http {
    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings

    map $time_iso8601 $year {
        default             'year';
        '~^(?<yyyy>\d{4})-'     $yyyy;
    }
    map $time_iso8601 $month {
        default             'month';
        '~^\d{4}-(?<mm>\d{2})-'     $mm;
    }
    map $time_iso8601 $day {
        default             'day';
        '~^\d{4}-\d{2}-(?<dd>\d{2})'    $dd;
    }
    map $time_iso8601 $hour {
            default             'hour';
            '~^\d{4}-\d{2}-\d{2}T(?<hh>\d{2})'    $hh;
        }
    map $time_iso8601 $min {
            default             'minute';
            '~^\d{4}-\d{2}-\d{2}T\d{2}:(?<mn>\d{2})'    $mn;
        }

    map $time_iso8601 $formatted_date {
        default                         'date-not-found';
        '~^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})'    $year-$month-$day;
    }


    access_log /var/log/nginx/access.$formatted_date,$hour:$min.log;
    error_log /var/log/nginx/error.log;


    ##
    # Gzip Settings
    ##

    gzip on;

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;}

添加上面代码的图片以防格式不正确 nginx config snapshot

这里我还根据我的要求添加了小时和分钟参数,如果您不需要它,您可以简单地删除下面突出显示的 $hour 和 $min 的地图块。

map $time_iso8601 $hour {
        default             'hour';
        '~^\d{4}-\d{2}-\d{2}T(?<hh>\d{2})'    $hh;
}
    map $time_iso8601 $min {
        default             'minute';
        '~^\d{4}-\d{2}-\d{2}T\d{2}:(?<mn>\d{2})'    $mn;
    }

和来自文件路径

access_log /var/log/nginx/access.$formatted_date.log;

它只能使用日期作为日志文件名,您也可以根据您的要求对其进行自定义。

如果你想在像 xyz.com 这样的子配置文件中使用它,你需要从 nginx.conf 中删除 http 模块,即 http{} 并在你的 xyz.com 配置文件中以相同的方式更新它,否则它将嵌套为 http(http{}},这可能会导致问题。