nginx location配置

Author Avatar
丁起男 11月 13,2020
  • 在其它设备中阅读本文章

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后面配置的路径丢弃掉,把当前匹配到的目录指向到指定目录

注意:

  1. 使用alias时,目录名后一定要加“/”
  2. alias可以指定任何名称
  3. alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用
  4. 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