首页 / 资讯中心 / 文章详情

nginx内置预定义变量总结

nginx内置预定义变量总结 ★ FEATURED ARTICLE
一、内置预定义变量内置预定义变量即无需声明就可以使用的变量通常包括一个http请求或响应中一部分内容的值以下为一些常用的内置预定义变量变量名含义$args请求中的参数值$query_string同 $args$arg_NAMEGET请求中NAME的值$is_args如果请求中有参数值为?否则为空字符串$uri请求中的当前URI(不带请求参数参数位于a r g s ) 可以不同于浏览器传递的 args)可以不同于浏览器传递的args)可以不同于浏览器传递的request_uri的值它可以通过内部重定向或者使用index指令进行修改$uri不包含主机名如/foo/bar.html。$document_uri同 $uri$document_root当前请求的文档根目录或别名$host优先级HTTP请求行的主机名HOST请求头字段符合请求的服务器名.请求中的主机头字段如果请求中的主机头不可用则为服务器处理请求的服务器名称$hostname主机名$https如果开启了SSL安全模式值为on否则为空字符串。$binary_remote_addr客户端地址的二进制形式固定长度为4个字节$body_bytes_sent传输给客户端的字节数响应头不计算在内这个变量和Apache的mod_log_config模块中的%B参数保持兼容$bytes_sent传输给客户端的字节数$connectionTCP连接的序列号$connection_requestsTCP连接当前的请求数量$content_length“Content-Length” 请求头字段$content_type“Content-Type” 请求头字段$cookie_namecookie名称$limit_rate用于设置响应的速度限制$msec当前的Unix时间戳$nginx_versionnginx版本$pid工作进程的PID$pipe如果请求来自管道通信值为p否则为.$proxy_protocol_addr获取代理访问服务器的客户端地址如果是直接访问该值为空字符串$realpath_root当前请求的文档根目录或别名的真实路径会将所有符号连接转换为真实路径$remote_addr客户端地址$remote_port客户端端口$remote_user用于HTTP基础认证服务的用户名$request代表客户端的请求地址$request_body客户端的请求主体此变量可在location中使用将请求主体通过proxy_passfastcgi_passuwsgi_pass和scgi_pass传递给下一级的代理服务器$request_body_file将客户端请求主体保存在临时文件中。文件处理结束后此文件需删除。如果需要之一开启此功能需要设置client_body_in_file_only。如果将次文件传递给后端的代理服务器需要禁用request body即设置proxy_pass_request_body offfastcgi_pass_request_body offuwsgi_pass_request_body offor scgi_pass_request_body off$request_completion如果请求成功值为OK如果请求未完成或者请求不是一个范围请求的最后一部分则为空$request_filename当前连接请求的文件路径由root或alias指令与URI请求生成$request_length请求的长度 (包括请求的地址http请求头和请求主体)$request_methodHTTP请求方法通常为GET或POST$request_time处理客户端请求使用的时间,单位为秒精度毫秒从读入客户端的第一个字节开始直到把最后一个字符发送给客户端后进行日志写入为止。$request_uri这个变量等于包含一些客户端请求参数的原始URI它无法修改请查看$uri更改或重写URI不包含主机名例如“/cnphp/test.php?argfreemouse”$scheme请求使用的Web协议“http” 或 “https”$server_addr服务器端地址需要注意的是为了避免访问linux系统内核应将ip地址提前设置在配置文件中$server_name服务器名$server_port服务器端口$server_protocol服务器的HTTP版本通常为 “HTTP/1.0” 或 “HTTP/1.1”$statusHTTP响应代码$time_iso8601服务器时间的ISO 8610格式$time_local服务器时间LOG Format 格式$cookie_NAME客户端请求Header头中的cookie变量前缀$cookie_加上cookie名称的变量该变量的值即为cookie名称的值$http_NAME匹配任意请求头字段变量名中的后半部分NAME可以替换成任意请求头字段如在配置文件中需要获取http请求头“Accept-Language”$http_accept_language即可$http_cookie#请求的所有cookie$http_host请求地址即浏览器中你输入的地址IP或域名$http_refererurl跳转来源,用来记录从那个页面链接访问过来的$http_user_agent用户终端浏览器等信息$http_x_forwarded_for客户端的IP和代理服务器的IP以逗号隔开可伪造$http_x_forwarded_proto请求的协议$sent_http_NAME可以设置任意http响应头字段变量名中的后半部分NAME可以替换成任意响应头字段如需要设置响应头Content-length$sent_http_content_length即可$sent_http_cache_control$sent_http_connection$sent_http_content_type$sent_http_keep_alive$sent_http_last_modified$sent_http_location更多变量可参考官网二、常用配置2.1 nginx反向代理后转发原有IP和浏览器等信息location /{root html;proxy_set_header X-Real-IP$remote_addr;proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_header Host$http_host;proxy_set_header X-NginX-Proxytrue;fastcgi_param HTTP_X_FORWARDED_FOR$http_x_forwarded_for;proxy_set_header User-Agent$http_user_agent;proxy_pass http://myServer;}2.2 nginx按天按月日志切割server{...if($time_iso8601~^(\d{4})-(\d{2})-(\d{2})){set$year$1;set$month$2;set$day$3;}// 按天切割日志 access_log /var/log/nginx/time_$year-$month-$day.log laker;// 按月切割日志 access_log /var/log/nginx/time_$year-$month.log laker;...}注意:注意层次关系这段脚本一定要加到server配置内部且if要在access_log前面否则set的变量将无法引用。2.3 nginx路径拼接规则URI拼接方式取决于proxy_pass是否带/或路径具体规则如下表locationproxy_pass请求路径转发到后端备注/api/http://bk//api/x/x去掉/api//api/http://bk/api/x/api/x原样转发/apihttp://bk/foo//api/x/foo/x替换匹配分/api/http://bk/app/api/x/appx直接去掉了斜杠拼接核心规则: proxy_pass带URI(含尾斜杠或路径)时location匹配到的部分被替换掉; 只写host:port时原URI透传。第4行说明带路径但不带尾斜杠会黏连务必加尾斜杠或用rewrite显式控制:location /api/{rewrite ^/api/(.*)$ /$1break;proxy_pass http://bk;
阅读完成 · 觉得有帮助?
咨询建站