nginx配置 笔记

   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&notice=456 中$args 表示“token=123&notice=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

  待补充。。。

猜你喜欢

转载自sonicery-d.iteye.com/blog/2185953