Nginx:我可以在指定访问日志位置时使用 $server_name 吗?

Posted

技术标签:

【中文标题】Nginx:我可以在指定访问日志位置时使用 $server_name 吗?【英文标题】:Nginx: can I use $server_name when specifying access log location? 【发布时间】:2013-05-22 07:02:47 【问题描述】:

我想为 nginx 虚拟主机编写一个配置文件,如下所示:

server 
    listen 80;
    server_name www.my-domain-name.com;

    access_log /home/me/sites/$server_name/logs/access.log;
    error_log  /home/me/sites/$server_name/logs/error.log;

    location /static 
        alias /home/me/sites/$server_name/static;
    

    location / 
        proxy_pass http://localhost:8000;
    

使用$server_name 似乎对location /static 有效,但对access_logerror_log 似乎不起作用——我做错了什么吗?或者这是不可能的?我可以用其他方式吗?

[update] - 这是尝试重新加载 nginx 时的错误消息:

nginx: [emerg] open() "/home/me/sites/$server_name/logs/error.log" failed (2: No such file or directory)

【问题讨论】:

Outlook not good. 需要使用$host变量#serverfault.com/a/283182 这里也不能使用宿主变量。 【参考方案1】:

我也想这样做,但显然 nginx 无法在 error_log 命令中扩展变量,以防出现错误并且无法获取日志文件名来写入它们。

他们的建议是使用一些程序来生成您的配置文件。您可以为此使用sed,自动搜索和替换您自己的变量并将输出放置在 nginx 配置目录中。

【讨论】:

正确。最后我只是想我会使用sed 在多个地方替换主机名,不要介意重复......

以上是关于Nginx:我可以在指定访问日志位置时使用 $server_name 吗?的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置log_format日志格式不生效

Nginx日志

用nginx指定访问tomcat日志

Nginx访问日志日志切割静态文件不记录日志和过期时间

haproxy+keepalived+apache2 记录日志格式难题求助!

elkstack实战---集中管理nginx访问日志及报表展示