有没有办法在 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
变量。因此,我认为被描述为小路能够进行变量插值。