nginx本身拥有大量官方发布的模块和第三方模块,这些已有的模块可以帮助我们实现web服务器上很多的功能。使用这些模块时也只需要增加或修改一些配置项即可。
总所周知,nginx是一个支持多进程的web服务器
- location 配置:
正则location:
~和~* 是在使用正则表达式时的前缀,~ 表示区分大小写 ~* 不区分大小写
普通location:
包括带有前缀(=、^~、@)和无任何前缀的location
nginx的匹配规则是先匹配 普通的location 再匹配 正则location ,而普通location内部匹配原则是 匹配最贴近的那个 简单一点儿就是匹配长度较长的那个。
需要注意的是:当普通location匹配完成之后,nginx会继续匹配正则location,当匹配当第一个正则location就停止匹配,所以正则location之间是按照物理的定义顺序进行匹配的。
如果正则location匹配上了 就会覆盖刚才匹配的普通location,但是若未匹配上,就使用之前匹配上的普通location。
但是如果我们不想匹配完普通location 再继续匹配正则location 怎么办呢?
这时需要我们加上前缀 ^~ 或 =,它俩是有区别的:^~ 阻止了正则location的匹配,还支持最大匹配
而= 阻止了正则location 必须严格精确匹配
综上所述,我们可以得到一个结论:正则匹配会让步 普通的精确匹配 但是会覆盖最大前缀的普通匹配
此外,除了普通location和正则location外 ,还有一种“@”位前缀的location,@是用来定义named location,这种location不是处理普通请求的,而是用来专门处理内部重定向的(internally redirected) 也即 内部的forward动作。
- ngx_http_core_module模块常见变量
ngx_http_core_module 模块在处理请求时,会有大量的变量。这些变量既可以被访问日志记录,又可以被其他nginx模块使用。
$arg_PARAMETER http请求中某个参数的值,例如/showcase?user=123 可以通过$arg_user 来取得123这个值。
$args HTTP http请求中的完整参数,例如/index.html?token=123¬ice=456 中$args 表示“token=123¬ice=456”
$binary_remote_addr 二进制格式的客户端地址。例如 \xOA\xEOB\xOE
$body_bytes_sent 表示向客户端发送的http响应中,包体部分的字节数
$content_length 表示客户端请求头部中的Content-Length字段
$content_type 表示客户端请求头部中的Content-type字段
$cookie_COOKIE 表示客户端请求头部中的cookie字段
$document_root 表示当前请求所使用的root配置项的值
$uri 表示当前请求的URI不带任何参数
$document_uri 与$uri含义相同
$request_uri 表示客户端发来的原始请求URI,带完整的参数。$uri和$document_uri不一定是用户发来的原始请求,在内部重定向后可能是重定向后的URI,而$request_uri永远不会改变,始终是客户端的原始URI
$host 表示客户端请求头中的Host字段。如果host字段不存在则以实际处理的server(虚拟主机)名称来代替。如果Host字段带有端口,如IP:PORT,那么host是去掉端口的IP值,$host是全小写的。这些特性与http_HEADER中的http_host不同,http_host只取出Host头部对应的值。
$hostname 表示nginx所在机器的名称,与gethostbyname调用返回的值相同
$http_HEADER 表示当前请求中相应的头部的值。例如,Host在头部对应的值 用$http_host表示
$send_http_HEADER 表示返回客户端的HTTP响应中相应的头部值。HEADER名称全小写。例如, $send_http_content_length 表示返回响应Content-Type头部对应的值。
$is_args 表示请求中的URI是否带参数,如果带参数,$is_args的值为?,如果不带参数,则是空字符串。
$limit_rate 表示当前的限速是多少,0表示无限速。
$nginx_version 表示当前nginx的版本号
$query_string 请求URI中的参数,与$args相同,但是$query_string是只读的
$remote_addr 表示客户端地址
$remote_port 表示客户端连接使用的端口号
$remote_user 表示使用Auth Basic Module时定义的用户名
$request_filename 表示用户请求中的URI进过root或alias转换后的文件路径
$request_body 表示HTTP请求中的包体,该参数只在proxy_pass或fastcgi_pass中有意义。
$request_body_file 表示HTTP请求包体存储的临时文件名
$request_completion 当请求全部完成时,其值为“ok”。若没有完成,就要返回客户端,则其值为空字符串;或者在断点续传等情况下使用HTTP range访问的并不是文件的最后一块,那么其值也是空字符串
$request_method 表示HTTP请求的方法名,如GET、PUT、POST等
$scheme 表示HTTP scheme,如在请求https://www.sonicery-d.com/中表示https
$server_addr 表示服务器地址
$server_name 表示服务器名称
$server_port 表示服务器端口
$server_protocol 表示服务器向客户端发送响应使用的协议,如 HTTP/1.0或HTTP/1.1
待补充。。。