答案1
据我所知,error_log
即使您可以使用变量,但仍然不允许进入access_log
(因为您的屏幕截图显示在您的场景中正常工作)。
除此之外,您几乎总是应该使用它,$host
因为它是唯一保证的变量,无论用户代理的行为如何,都能说出合理的内容。
您可以检查 $host 和 $server_name 之间的区别nginx 文档:
$host
:按以下优先顺序:来自请求行的主机名,或来自“Host”请求标头字段的主机名,或与请求匹配的服务器名称。$server_name
:服务器名称接受了请求。它包含server_name
处理请求的虚拟主机,因为它是在 nginx 配置中定义的。如果服务器包含多个 server_name,则只有第一个会出现在此变量中。
由于您必须考虑用户代理在形成 HTTP 请求时可能执行的所有操作(古老的 HTTP/1.0 请求和现代编写糟糕的软件可能随时发生),因此您应该考虑仅将变量$host
用于您的预期目的。
值得一提的是access_log
被处理通过ngx_http_log_module
,而error_log被处理有点不同ngx_core_module
。