我在配置文件中有以下内容
server {
listen 80;
server_name _;
access_log /var/log/nginx/access.log main;
...
server {
listen 80;
server_name example.com
access_log off;
error_log off;
Run Code Online (Sandbox Code Playgroud)
但它仍然保持记录example.com
虚拟主机。我究竟做错了什么?
rvs*_*rvs 38
您;
在 server_name 指令后丢失。access_log
和off
正在接受治疗的附加server_names配置。
小智 26
当然,您可以完全禁用日志记录。只需将日志文件指向 /dev/null 即可。;)
access_log /dev/null;
error_log /dev/null;
Run Code Online (Sandbox Code Playgroud)
小智 18
您可以access_log
使用禁用
access_log off;
Run Code Online (Sandbox Code Playgroud)
但是如果你想禁用 error_log,就不要在你的 conf 中使用 error_log 选项。
截至2020年1月,针对nginx 1.14.0+
nginx禁用访问和错误日志的普遍问题解决如下:
要在某些配置级别禁用日志,假设它已在更高级别上显式启用或默认启用(按原样启用),请使用以下指令*:
access_log off;
Run Code Online (Sandbox Code Playgroud)
(回答说您应该将此类日志重定向到/dev/null
已过时。)
请注意,该access_log
指令可以设置多个在单个水平次,但上面的记录禁止在当前级别的所有访问日志记录。
禁用错误日志更加棘手,因为没有明确的选项可以在较低的配置级别将其关闭,如果它已在更高的配置级别启用或默认启用(按原样)!
因此,在这种情况下,您应该使用此答案建议的内容:
error_log /dev/null;
Run Code Online (Sandbox Code Playgroud)
想象一下,您有一个http
在此级别启用访问日志的单个server
条目,并且在多个条目中,其中一个server
是所有其他条目的入口点。假设您有一个server
配置了 SSL 的设备,它使用 HTTPS 侦听来自外部的连接,并将它们重定向到其他server
s,即各种 API 网关。
那么在某些 API 网关server
(或它们location
的)中禁用访问日志是不够的,因为请求仍将记录在外部 HTTPS 的访问日志中server
。
不好的例子:
http {
access_log /var/log/nginx/access.log main;
server {
listen 80;
location /app1 {
proxy_pass http://localhost:81;
}
(...)
}
server {
listen 81;
access_log off; # <----- this WON'T effectively work - requests will be logged in the access log by the server above
(...)
}
(...)
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您必须禁用给定请求的整个路径上的访问日志才能使其工作。但是当然更好的解决方案是考虑简化您的配置,因为即使您解决了访问日志的问题,您也可能会遇到更多惊喜......
更简单的配置示例:
http {
access_log /var/log/nginx/access.log main;
server {
listen 80;
location /app1 {
access_log off; # <----- this WILL work
proxy_pass http://app1server;
}
(...)
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
105393 次 |
最近记录: |