设为首页 收藏本站
查看: 1061|回复: 0

[经验分享] Apache Nginx中记录自定义Header

[复制链接]

尚未签到

发表于 2016-12-26 09:04:09 | 显示全部楼层 |阅读模式
  从Apache切到Nginx需要保持日志格式统一,以便兼容之前的数据统计脚本
  现在Apache的日志格式为:
LogFormat "%h %t %m %U %q %>s %{HEAD}i %D"
1

LogFormat"%h %t %m %U %q %>s %{HEAD}i %D"



  说明:
  %h:客户端IP地址
  %t:时间(标准英语格式)
  %m:请求的方法(GET,POST)
  %U:请求的URL路径,不包含查询字符串
  %q:查询字符串
  %>s:请求的最终状态
  %{HEAD}i:请求头信息
  %D:服务器处理请求所用时间,微秒为单位
  对应的Nginx日志格式为:
log_format  main  '$remote_addr [$time_local] $request_method $uri ''$query_string $status ''$http_head $request_time ';
1
2
3

log_format  main  '$remote_addr [$time_local] $request_method $uri '
                  '$query_string $status '
                  '$http_head $request_time ';



  其中Apache里的%{HEAD}i这个参数里的HEAD是在程序里自定义了一个header,在Nginx里面取这个HEAD用到的是$http_head参数,head就是自定义的header名称HEAD, Nginx里面需要小写,在这里走了不少弯路。
  用firebug获取http header,如下图
   DSC0000.png
  有两部分内容,一个是响应头,一个是请求头,请求头是客户端发送给服务器的,包括Requst Line及HTTP Header,响应头是服务器返回给客户端的,包括Status Line及HTTP Header。关于http header的说明,这里有一篇很好的文章可以参考。
  在Nginx里面可以用$upstream_http_’header名称’来获取响应头信息,比 如$upstream_http_content_type将会获取到类似text/html; charset=utf-8的内容,说明返回的文件类型及编码格式。在我的需求中是要获取自定义的请求头的内容,需要使用$sent_http_’自定义 header名称’来获取,但我测试过程中没有取到,用$http_’自定义header名称’才取到,也许和Nginx版本有关,我的版本是 1.4.2。
  另外,测试过程中用的是firefox的poster插件,可以自定义请求头,截图如下:
   DSC0001.png
  自定义一个header,然后输入URL,点GET即可发送带有自定义header的请求,在服务器端查看日志可以看到取到了‘AAAAAAAAAAAAAAAAAAAAAA’.
  附nginx.org里关于log_format参数的说明,英文不好,看着费劲。
  The ngx_http_core_module module supports embedded variables with names matching the Apache Server variables. First of all, these are variables representing client request header fields, such as $http_user_agent, $http_cookie, and so on. Also there are other variables:
  $arg_name
argument name in the request line
  $args
arguments in the request line
  $binary_remote_addr
client address in a binary form, value’s length is always 4 bytes
  $body_bytes_sent
number of bytes sent to a client, not counting the response header; this variable is compatible with the “%B” parameter of the mod_log_config Apache module
  $bytes_sent
number of bytes sent to a client (1.3.8, 1.2.5)
  $connection
connection serial number (1.3.8, 1.2.5)
  $connection_requests
current number of requests made through a connection (1.3.8, 1.2.5)
  $content_length
“Content-Length” request header field
  $content_type
“Content-Type” request header field
  $cookie_name
the name cookie
  $document_root
root or alias directive’s value for the current request
  $document_uri
same as $uri
  $host
in this order of precedence: host name from the request line, or host name from the “Host” request header field, or the server name matching a request
  $hostname
host name
  $http_name
arbitrary request header field; the last part of a variable name is the field name converted to lower case with dashes replaced by underscores
  $https
“on” if connection operates in SSL mode, or an empty string otherwise
  $is_args
“?” if a request line has arguments, or an empty string otherwise
  $limit_rate
setting this variable enables response rate limiting; see limit_rate
  $msec
current time in seconds with the milliseconds resolution (1.3.9, 1.2.6)
  $nginx_version
nginx version
  $pid
PID of the worker process
  $pipe
“p” if request was pipelined, “.” otherwise (1.3.12, 1.2.7)
  $proxy_protocol_addr
client address from the PROXY protocol header, or an empty string otherwise (1.5.12)
The PROXY protocol must be previously enabled by setting the proxy_protocol parameter in the listen directive.
  $query_string
same as $args
  $realpath_root
an absolute pathname corresponding to the root or alias directive’s value for the current request, with all symbolic links resolved to real paths
  $remote_addr
client address
  $remote_port
client port
  $remote_user
user name supplied with the Basic authentication
  $request
full original request line
  $request_body
request body
The variable’s value is made available in locations processed by the proxy_pass, fastcgi_pass, uwsgi_pass, and scgi_pass directives.
  $request_body_file
name of a temporary file with the request body
At the end of processing, the file needs to be removed. To always write the request body to a file, client_body_in_file_only needs to be enabled. When the name of a temporary file is passed in a proxied request or in a request to a FastCGI/uwsgi/SCGI server, passing the request body should be disabled by the proxy_pass_request_body off, fastcgi_pass_request_body off, uwsgi_pass_request_body off, or scgi_pass_request_body off directives, respectively.
  $request_completion
“OK” if a request has completed, or an empty string otherwise
  $request_filename
file path for the current request, based on the root or alias directives, and the request URI
  $request_length
request length (including request line, header, and request body) (1.3.12, 1.2.7)
  $request_method
request method, usually “GET” or “POST”
  $request_time
request processing time in seconds with a milliseconds resolution (1.3.9, 1.2.6); time elapsed since the first bytes were read from the client
  $request_uri
full original request URI (with arguments)
  $scheme
request scheme, “http” or “https”
  $sent_http_name
arbitrary response header field; the last part of a variable name is the field name converted to lower case with dashes replaced by underscores
  $server_addr
an address of the server which accepted a request
Computing a value of this variable usually requires one system call. To avoid a system call, the listen directives must specify addresses and use the bind parameter.
  $server_name
name of the server which accepted a request
  $server_port
port of the server which accepted a request
  $server_protocol
request protocol, usually “HTTP/1.0” or “HTTP/1.1”
  $status
response status (1.3.2, 1.2.2)
  $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space
information about the client TCP connection; available on systems that support the TCP_INFO socket option
  $time_iso8601local
time in the ISO 8601 standard format (1.3.12, 1.2.7)
  $time_local
  local time in the Common Log Format (1.3.12, 1.2.7)
  $uri
current URI in request, normalized
The value of $uri may change during request processing, e.g. when doing internal redirects, or when using index files.
  参考:http://blog.51yip.com/apachenginx/1277.html
  转载请注明:海布里 » 在Nginx中记录自定义Header

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-319429-1-1.html 上篇帖子: Nginx中将正式环境流量copy一份到测试环境 下篇帖子: Nginx 的启动、停止、平滑重启、信号控制和平滑升级
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表