基于非WWW主机的Nginx访问日志名称

时间:2018-06-26 09:22:33

标签: regex variables nginx logging

所以

我有一台服务器,其中包含大约30个虚拟主机配置,每个配置都在各自单独的文件中。我的主要目的是基于$host变量命名访问日志。

此刻,我正在HTTP块中使用以下内容来应用于所有conf文件:

http {
    access_log /var/log/nginx/$host.access.log
}

我希望能够重写上述$host 而无需 www。,而只保留域本身。我已经找到了以下解决方案:

    if ($domain ~* www\.(.*)) {                                                                                                                                                                              
            set $domain $1;                                                                                                                                                                                  
            rewrite ^(.*)$ http://$domain$1 permanent;                                                                                                                                                       
    }

唯一的问题是..不允许在'http'块内使用'IF'指令。.我仍然可以在仍处于'http'块内的情况下实现这一目标吗?也许使用“地图”?

预先感谢

汤姆

1 个答案:

答案 0 :(得分:1)

您应该使用地图

http {
   map $host $hostw {
        default         $host;
        ~*^www\.(.*)     $1;
   }
    access_log /var/log/nginx/$hostw.access.log
}