nginx location配置
语法规则:location=[=|~|~*|^~]/uri/{...}
- =:精确匹配,这个优先级也是最高的
- ^~:uri以某个常规字符串开头,理解为匹配url即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则
^~ /static/ /aa
匹配到 - ~:区分大小写的正则匹配
- ~*:不区分大小写的正则匹配
- !~:区分大小写的不匹配
- !~*:不区分大小写的不匹配
- /:通用匹配,任何请求都会匹配到,默认匹配
优先级
多个location匹配匹配顺序为:
首先匹配=,其次匹配^~,其次是按文件中顺序的正则匹配,最后交给/通用匹配。
当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
文件路径配置
nginx指定文件路径有两种方式root和alias,这两者的用法区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式请求映射到服务器文件上。
[root]
语法:root path
默认值:root html
配置段:http、server、location、if
root会根据完整的uri请求来映射
[alias]
语法:alias path
配置段:location
alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定目录
注意:
- 使用alias时,目录名后一定要加“/”
- alias可以指定任何名称
- alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用
- alias只能位于location块中
变量
ngx_http_core_module模块在处理请求时,会有大量的变量,这些变量可以通过访问日志来记录下来,也可以用于其它nginx模块。
参数名 | 注释 |
---|---|
$arg_[参数名] | http请求中某个参数的值 |
$args | 请求中的完整参数 |
$binary_remote_addr | 二进制格式的客户端地址 |
$body_bytes_sent | 表示在向客户端发送的http响应中,包括部分的字节数 |
$content_length | 表示客户端请求头中的Content-Length字段 |
$content_type | 表示客户端请求头中的Context-Type字段 |
$cookie_[字段] | 表示在客户端请求头中的cookie字段 |
$document_root | 表示当前请求所使用的root配置项的值 |
$uri | 表示当前请求的uri,不带任何参数 |
$document_uri | 与$uri含义相同 |
$request_uri | 表示客户端发来的原始请求uri,带完整参数 |
$host | 表示客户端请求头的Host字段。 |
$hostname | 表示nginx所在机器的名称,与gethosstbyname返回值相同 |
$http_[字段] | 表示当前http请求中响应头部的值。名称权小写 |
$sent_http_[字段] | 表示返回客户端的http响应头的值。名称全部小写 |
$is_args | 表示请求中uri是否带参数。如果有值为?,否则为空串 |
$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、post等 |
$scheme | 表示http scheme,如https://nginx.com/中表示https |
$server_addr | 表示服务器地址 |
$server_name | 表示服务器名称 |
$server_port | 表示服务器端口 |
$server_protocol | 表示服务器向客户端发送响应的协议,如http/1.1或http/1 |