nginx: [warn] the "log_format" directive may be used only on "http" level 解决方法
2012-07-04 18:02
886 查看
运行nginx的时候老是报错:
nginx: [warn] the "log_format" directive may be used only on "http" level in xxx/nginx.conf:95
虽然只是warning但是仍然影响心情,于是决定仔细看看它的结构。
example:
access_log off
Default: logs/access.log combined
Context: http
server
location
if in location
limit_except
Reference: access_log
The access_log directive sets the path, format and buffer size for the access log file. Using "off" as the only parameter clears all access_log directives for the current level. If the format is not indicated, it defaults to "combined". The size of buffer must not exceed the size of the atomic record for writing into the disk file. This size is not limited for FreeBSD 3.0-6.0.
The log file path can contain variables (version >=0.7.4) but such logs have some limitations:
worker user must have permission to create files in;
buffering does not work;
for each log entry, the file is opened and immediately closed after writing the record. However, descriptors of frequently used files may be stored in open_log_file_cache . Regarding log rotation, it must be kept in mind that over time (which is set by the parameter valid of directive open_log_file_cache), logging can be still continue to the old file.
Nginx supports powerful access log separation per location. Accesses can also be output to more than one log at the same time. For more details, see the Multiple access_log directives in different contexts thread on the mailing list.
Default: combined "..."
Context: http
Reference: log_format
The log_format directive describes the format of a log entry. You can use general variables in the format, as well as variables which exist only at the moment of writing into the log:
$body_bytes_sent, the number of bytes, transmitted to client minus the response headers. This variable is compatible with the %B parameter of Apache's mod_log_config (this was called $apache_bytes_sent, before version 0.3.10)
$bytes_sent, the number of bytes transmitted to client
$connection, the number of connection
$msec, the current time at the moment of writing the log entry (microsecond accuracy)
$pipe, "p" if request was pipelined
$request_length, the length of the body of the request
$request_time, the time it took nginx to work on the request, in seconds with millisecond precision (just seconds for versions older than 0.5.19)
$status, status of answer
$time_iso8601, time in ISO 8601 format, e. g. 2011-03-21T18:52:25+03:00 (added in 0.9.6)
$time_local, local time into common log format.
The headers, transmitted to client, begin from the prefix "sent_http_", for example, $sent_http_content_range.
Note that variables produced by other modules can also be logged. For example you can log upstream response headers with the prefix "upstream_http_", see upstream .
There is a predefined log format called "combined":
参考文档:http://wiki.nginx.org/NginxHttpLogModule#open_log_file_cache
正确的解决方法是:
将/usr/local/nginx/conf/nginx.conf 里server段里的下面代码移出放到该server段的前面即可。
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
如果有其的虚拟主机开启了日志,也按上面的要求移出server段放在server段的前面即可。
再/usr/local/nginx/sbin/nginx -t 测试一下,没有warn警告信息了。
人家nginx也提示了么,要放到 http 层,而不是server层里哦。
nginx: [warn] the "log_format" directive may be used only on "http" level in xxx/nginx.conf:95
虽然只是warning但是仍然影响心情,于是决定仔细看看它的结构。
example:
log_format gzip'$remote_addr - $remote_user [$time_local] ''"$request" $status $bytes_sent ''"$http_referer" "$http_user_agent" "$gzip_ratio"'; access_log /spool/logs/nginx-access.log gzip buffer=32k;
access_log
Syntax: access_log path [ format [ buffer = size ]]access_log off
Default: logs/access.log combined
Context: http
server
location
if in location
limit_except
Reference: access_log
The access_log directive sets the path, format and buffer size for the access log file. Using "off" as the only parameter clears all access_log directives for the current level. If the format is not indicated, it defaults to "combined". The size of buffer must not exceed the size of the atomic record for writing into the disk file. This size is not limited for FreeBSD 3.0-6.0.
The log file path can contain variables (version >=0.7.4) but such logs have some limitations:
worker user must have permission to create files in;
buffering does not work;
for each log entry, the file is opened and immediately closed after writing the record. However, descriptors of frequently used files may be stored in open_log_file_cache . Regarding log rotation, it must be kept in mind that over time (which is set by the parameter valid of directive open_log_file_cache), logging can be still continue to the old file.
Nginx supports powerful access log separation per location. Accesses can also be output to more than one log at the same time. For more details, see the Multiple access_log directives in different contexts thread on the mailing list.
log_format
Syntax: log_format name string ...Default: combined "..."
Context: http
Reference: log_format
The log_format directive describes the format of a log entry. You can use general variables in the format, as well as variables which exist only at the moment of writing into the log:
$body_bytes_sent, the number of bytes, transmitted to client minus the response headers. This variable is compatible with the %B parameter of Apache's mod_log_config (this was called $apache_bytes_sent, before version 0.3.10)
$bytes_sent, the number of bytes transmitted to client
$connection, the number of connection
$msec, the current time at the moment of writing the log entry (microsecond accuracy)
$pipe, "p" if request was pipelined
$request_length, the length of the body of the request
$request_time, the time it took nginx to work on the request, in seconds with millisecond precision (just seconds for versions older than 0.5.19)
$status, status of answer
$time_iso8601, time in ISO 8601 format, e. g. 2011-03-21T18:52:25+03:00 (added in 0.9.6)
$time_local, local time into common log format.
The headers, transmitted to client, begin from the prefix "sent_http_", for example, $sent_http_content_range.
Note that variables produced by other modules can also be logged. For example you can log upstream response headers with the prefix "upstream_http_", see upstream .
There is a predefined log format called "combined":
log_format combined '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent"';
参考文档:http://wiki.nginx.org/NginxHttpLogModule#open_log_file_cache
正确的解决方法是:
将/usr/local/nginx/conf/nginx.conf 里server段里的下面代码移出放到该server段的前面即可。
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
如果有其的虚拟主机开启了日志,也按上面的要求移出server段放在server段的前面即可。
再/usr/local/nginx/sbin/nginx -t 测试一下,没有warn警告信息了。
人家nginx也提示了么,要放到 http 层,而不是server层里哦。
相关文章推荐
- nginx: [warn] the "log_format" directive may be used only on "http" level 解决方法
- nginx: [warn] the "log_format" directive may be used only on "http" level 解决方法
- nginx: [warn] the "log_format" directive may be used only on "http" level 解决方法
- nginx: [warn] "log_format" directive used only on "http" level 解决方法
- nginx新版本配置文件警告 the "log_format" directive may be used only on "http"
- log_format directive may be used only on http level
- vs2005下出现“Session state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive”的解决方法
- nginx -t "nginx: [warn] only the last index in "index" directive should be absolute in 6 "的问题解决
- 编译报错“a pointer to a bound function may only be used to call the function”的解决办法
- 项目忽然出现 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path的解决方法
- a pointer to a bound function may only be used to call the function
- 项目出现 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法
- Nginx出现The plain HTTP request was sent to HTTPS port问题解决方法
- Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法
- java eclipse maven The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path解决方法
- Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法
- Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法
- nginx: [warn] conflicting server name "这里是域名 eg:abc.com" on 0.0.0.0:80, ignored解决方法