nginx 未在 error_log 位置解析 $document_root

nginx 未在 error_log 位置解析 $document_root

有没有办法在 nginx 的 error_log 位置中使用 $document_root 变量?有具体提到在 access_log 位置支持该变量在 wiki 中但没有关于 error_log 的信息。我猜这是因为它们来自不同的模块?

只是想避免在会议上重复自己,如果有办法做到这一点那就太好了!

达伦

答案1

有没有办法在 nginx 的 error_log 位置中使用 $document_root 变量?

不幸的是,不行。如果你把一个变量放在指令中,但它没有被插入,你就无能为力了。

有一个Nginx 常见问题解答页面关于这个确切的主题,其中说(缩写):

变量不应用作模板宏。相反,应使用宏扩展和“include”指令来更轻松地生成配置,并且可以使用外部工具(例如 sed + make 或任何其他常见模板机制)来完成。

好的,但是为什么文档具体显示access_log指令中使用的变量?

您正确地提到文档access_log包含一些变量用法。

开始猜测:有些指令比其他指令更强大。根据 Nginx 文档,第一个参数access_log可以是小路,而 的第一个参数error_log可以是文件。以下是access_log 文档页面

server {
    root       /spool/vhost/data/$host;
    access_log /spool/vhost/logs/$host;
    ...

root和都access_log可以使用$host变量。因此,我认为被描述为小路能够进行变量插值。

相关内容