语法:location [ = | ~ | ~* | ^~ ] uri {
…一组命令… }

一、 location 的匹配符

Syntax:

location [ = | ~ | ~* | ^~ ] uri { … }
location @name { … }

   

nginx的location和nginx.conf中location的书写顺序没有太大的关联

nginx.conf配置文件分析(http、server、location)

标签:
nginxnginx-conf

2017-04-26 20:10 1031人阅读
评论(0)
收藏
举报

澳门金沙国际 1 分类:

Nginx(8) 澳门金沙国际 2

版权证明:本文为博主原创文章,未经博主允许不得转发。

nginx.conf文件在设置目录/conf目录下


壹 、定义Nginx运转的用户和用户组

user nginx nginx;

贰 、nginx进度数,建议安装为等于CPU总主题数

worker_processes 1;

③ 、全局错误日志定义类型,[ debug | info | notice | warn | error | crit
]

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

四 、进度文件

pid /var/run/nginx.pid;

⑤ 、工作格局与连接数上限:worker_connections是单个后台worker
process进度的最大并发链接数,并发总数是 worker_processes 和
worker_正则表明式,conf配置文件分析。connections 的乘积, 即 max_clients = worker_processes *
worker_connections

events {
    worker_connections  1024;
}

⑥ 、http下的一对配备及其意义

include       mime.types; #文件扩展名与文件类型映射表
default_type  application/octet-stream; #默认文件类型
sendfile on;  #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来 输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置 为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常 把这个改成off。
autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞
keepalive_timeout 120; #长连接超时时间,单位是秒
gzip on; #开启gzip压缩输出

七 、server虚拟主机一些布局及其意义
澳门金沙国际 3
例如:

http{
 #虚拟主机1
 server{
  listen       80;
  server_name  www.nginx1.com;
  location / {
     root   html;
     index  index.html index.htm;
  }
 }

 #虚拟主机2
 server{
  listen       80;
  server_name  localhost;
  location / {
     root   html;
     index  index.html index.htm;
  }
 }
}

这里server_name配置域名的时候,若是是当地质衡量试,供给到windos下hosts文件里,把你的域名和ip添加进去(C:\Windows\System32\drivers\etc\hosts)

nginx协理三体系型的 虚拟主机配置

  • ① 、基于ip的虚拟主机, (一块主机绑定五个ip地址)

server{
  listen       192.168.1.1:80;
  server_name  localhost;
}
server{
  listen       192.168.1.2:80;
  server_name  localhost;
}
  • ② 、基于域名的虚拟主机(servername)

#域名可以有多个,用空格隔开
server{
  listen       80;
  server_name  www.nginx1.com www.nginx2.com;
}
server{
  listen       80;
  server_name  www.nginx3.com;
}
  • ③ 、基于端口的虚拟主机(listen不写ip的端口方式)

server{
  listen       80;
  server_name  localhost;
}
server{
  listen       81;
  server_name  localhost;
}

server下的location映射解析(官方普通话文书档案:ngx_http_core_module)匹配规则:location [ = | ~ | ~* | ^~ ] uri { ... }

location URI {}:

对现阶段路线及子路径下的拥有指标都见效;

location = URI {}:

规范匹配内定的门路(注意UKoleosL最好为实际路线),不包罗子路径,由此,只对近来财富生效;

location ~ URI {}:

location ~* URI {}:

形式匹配U奥德赛I,此处的U牧马人I可使用正则表明式,~区分字符大小写,~*不区
分字符大小写;

location ^~ URI {}:

不再检查正则表达式

优先级:= > ^~ > ~|~* > /|/dir/

举例:

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~  {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ { 
    [ configuration E ] 
} 

解答:请求“/”匹配配置A, 请求“/index.html”匹配配置B,
请求“/documents/document.html”匹配配置C, 请求“.gif”匹配配置D,
请求“/documents/1.jpg”匹配配置E

location配置规则

壹 、“ =”前缀的命令严峻匹配这么些查询。即使找到,截至搜索。
② 、全数盈余的常规字符串,匹配最规范的(一般最长的非常)。固然那几个匹配使用^〜前缀,搜索甘休。
③ 、正则表达式,在配置文件中是从上往下匹配的
四 、假如第叁条规则发生匹配的话,结果被采用。不然,就像是从第二条规则被应用
非凡意况:
二种状态下,不需求持续合营正则 location :
( 1 ) 当普通 location 前边钦定了“ ^~ ”,尤其告知 Nginx 本条普 通
location 一旦匹配上,则不须求一而再正则匹配。
( 2 ) 当普通location 恰好严峻匹配上
,不是最大前缀匹配,则不再继续合作正则

 

在nginx中配置proxy_pass时,当在背后的url加上了/,也就是是相对根路径,则nginx不会把location中分外的门路部分代理走;假设没有/,则会把匹配的路线部分也给代理走。

 

下边多样景况分别用
进行走访。

第一种:

location  /proxy/ {

          proxy_pass
;

}

会被代理到
这个url

 

第贰作者(绝对于第1种,最终少三个 /)

location  /proxy/ {

          proxy_pass
;

}

会被代理到
这个url

 

第三种:

location  /proxy/ {

          proxy_pass
;

}

会被代理到
这个url。

 

第多种情景(相对于第两种,最终少贰个 /
):

location  /proxy/ {

          proxy_pass
;

}

会被代理到
这个url

 

上边的结果都以自作者结合日志文件测试过的。从结果能够看到,应该说分为二种状态才正确。即
(上边的第三种) 这种和 …. (下面的第一,3,4种)
那种。

hosts,本地质衡量试

linux 修改/etc/hosts,加一条:127.0.0.1
www.you域名.cn .windows,修改hostname.

另外nginx的反向代理、Tengine(Nginx的升级版)的健检
也运用了location知识,能够去探访

  1.  语法格式:location [=|~|~*|^~|@]   /uri/ { … } ,
       根据差别的前缀“= ”,“^~ ”,“~ ”,“~* ”和不带任何前缀的(因为[
] 表示可选,能够绝不的),表明不一样的含义, 
     
简单来说纵然location 的/uri/ 配置一样,但前缀分化等,表达的是例外的一声令下含义。
       
注意:查询字符串不在U奥迪Q5I范围内。例如:/films.htm?fid=123 的ULANDI 是/films.htm 。)

location 定位

location /
{}:表示对/uri/目录及其子目录下的兼具文件都协作。所以”location /
{}”的匹配范围是最大的。
location = /uri/
{}:表示只对目录或文件举办匹配,不对目录中的文件和子目录举办匹配。所以一般只用来做文件匹配
location ~ /uri/
{}:表示区分轻重缓急写的正则匹配。
location ~* /uri/
{}:表示不区分轻重缓急写的正则匹配。
location ^~ /uri/
{}:表示禁止使用正则匹配,即标准字符串匹配,此时正则中的元字符被解释成一般字符。

 

= 表示精确匹配
/ 表示平常匹配(有几个命中结果,使用格外最长的不得了)

配对规则

2.对这个不一致前缀,分下类,就2 大类:
      正则location ,英文说法是location using regular expressions
      普通location ,英文说法是location using literal strings 。
     
那么内部“~ ”和“~* ”前缀表示正则location ,“~ ”区分轻重缓急写,“~* ”不区分轻重缓急写;
      别的前缀(包罗:“=”,“^~ ”和“@ ”)和   无任何前缀  
都属于常见location 。

正则匹配的规则如下(假使有八个location的正则能匹配的话,则运用正则表明式最长的可怜。)

nginx先检查U酷威I的前缀路径,在那个途径中找到最确切匹配请求UCRUISERI的不二法门。然后nginx按在安顿文件中的出现顺序检查正则表明式路径,匹配上有些路径后即结束匹配并采纳该路线的配备,否则使用最大前缀匹配的路线的安顿。

 

~ 代表执行八个正则匹配,区分轻重缓急写

行使”=”前缀能够定义U帕杰罗I和路线的标准匹配。借使发现匹配,则结束路径查找。例如请求”/”很频仍,定义”location
= /”能够增强那么些请求的处理速度,因为查找进度在首先次比较过后即结束。

详见表达:

~* 示执行三个正则匹配,不区分轻重缓急写

配对先行级

~       区分轻重缓急写匹配

!~ 区分轻重缓急写不般配

(location = uri )  >  (location ^~ uri)  >  (location *~|~ uri)
 >  (location uri)
等号           >        非正则          >          
    正则         > 没有此外标志

~*     不区分轻重缓急写匹配

!~*不区分轻重缓急写不包容

!~      区分轻重缓急写不合营
        !~*    不区分轻重缓急写不般配

^~ 开首表示uri以有些常规字符串起初,精晓为匹配 url路径即可。

^      以什么样伊始的卓殊

nginx不对url做编码,因而请求为/static/伍分之一/aa,

$      以什么样末了的匹配

能够被平整^~ /static/ /aa匹配到(注意是空格)。

*      代表专擅字符

last其实就相当于3个新的url,对nginx进行了1次呼吁,须求走二遍大多数的处理进程,最重庆大学的是会做三遍find
config,提供了二个得以转到别的location的安顿中拍卖的时机,而break则是在3个呼吁处理进度旅长本来的url(包含uri和args)改写之后,在继续展开末端的处理,这一个重写之后的央浼始终都是在同五个location中处理。

     

④ 、location UGL450I匹配规则

     文件及目录匹配

当nginx收到三个请求后,会截取请求的U奇骏I部份,去搜寻全体location指令中定义的U福特ExplorerI匹配方式。在server模块中得以定义多少个location指令来协作分化的url请求,多少个区别location配置的UENCOREI匹配格局,总体的协作原则是:先匹配普通字符串方式,再匹配正则格局。只识别U陆风X8I部份,例如请求为:/test/abc/user.do?name=xxxx
一个伸手过来后,Nginx匹配那一个请求的流程如下:
1> 先查找是还是不是有=起头的精确匹配,如:location = /test/abc/user.do { …
}
2> 再寻找普通匹配,以 最大前缀
为基准,如有以下四个location,则会协作后一项

-f和!-f用来判定是或不是留存文件

  • location /test/ { … }
  • location /test/abc { … }
    3>
    匹配到三个平时格式后,搜索没有了结,而是暂存当前协作的结果,并继续寻找正则匹配形式
    4>
    全数正则匹配格局location中找到第一个匹配项后,就以此项为末段匹配结果
    于是正则匹配项匹配规则,受定义的光景相继影响,但常常匹配方式不会
    5> 假使未找到正则匹配项,则以3中缓存的结果为尾声匹配结果
    6> 假诺3个同盟都没搜索到,则赶回404

-d和!-d用来判定是不是存在目录

三、ReWrite语法
last – 基本上都用那么些Flag。
set
demo
if ($http_user_agent ~* msie) {
set $test 1
}
if ($test 1) {
xxxxx
}
break – 中止Rewirte,不在继续同盟
redirect – 再次回到一时重定向的HTTP状态302
permanent – 再次回到永久重定向的HTTP状态301
注:last和break最大的两样在于

-e和!-e用来判断是还是不是留存文件或目录

  • break是终止当前location的rewrite检测,而且不再实行location匹配 –
    last是终止当前location的rewrite检查和测试,但会继续重试location匹配并拍卖区块中的rewrite规则
    ① 、上面是足以用来判定的表明式:
    -f和!-f用来判定是还是不是存在文件
    -d和!-d用来判断是还是不是存在目录
    -e和!-e用来判断是还是不是留存文件或目录
    -x和!-x用来判定文件是不是可实行
    ② 、上边是能够看做判断的全局变量
    $args #以此变量等于请求行中的参数。
    $content_length #请求头中的Content-length字段。
    $content_type #请求头中的Content-Type字段。
    $document_root #日前恳请在root指令中钦定的值。
    $host #恳请主机头字段,否则为服务器名称。
    $http_user_agent #客户端agent信息
    $http_cookie #客户端cookie信息
    $limit_rate #其一变量能够界定连接速率。
    $request_body_file #客户端请求主体音信的一时半刻文件名。
    $request_method #客户端请求的动作,日常为GET或POST。
    $remote_addr #客户端的IP地址。
    $remote_port #客户端的端口。
    $remote_user #一度经过Auth Basic Module验证的用户名。
    $request_filename
    #当下恳请的公文路径,由root或alias指令与U索罗德I请求生成。
    $query_string #与$args相同。
    $scheme #HTTP方法(如http,https)。
    $server_protocol #呼吁使用的商业事务,常常是HTTP/1.0或HTTP/1.1。
    $server_addr #服务器地址,在形成三遍系统调用后能够规定那么些值。
    $server_name #服务器名称。
    $server_port #请求到达服务器的端口号。
    $request_uri
    #富含呼吁参数的原始U汉兰达I,不分包主机名,如:”/foo/bar.php?arg=baz”。
    $uri
    #不带请求参数的当下U锐界I,$uri不分包主机名,如”/foo/bar.html”。
    $document_uri #与$uri相同。
    例:http://localhost:88/test1/test2/test.php
    $host:localhost
    $server_port:88
    $request_uri:http://localhost:88/test1/test2/test.php
    $document_uri:/test1/test2/test.php
    $document_root:D:\nginx/html
    $request_filename:D:\nginx/html/test1/test2/test.php

-x和!-x用来判断文件是不是可进行

nginx 反向代理
反向代理会导致后端服务器的IP为前端服务器的IP,而不是客户端的IP
故此须要添加
当nginx作为反向代理功效时,转载呼吁到后端服务器
平常必要选择如下命令为转载的呼吁扩大请求头 X-Forwarded-For

 

proxy_set_header X-Forwarded-For “特定的X-Forwarded-For值”

3.匹配符优先级 1.=
2.空匹配符,满意精确匹配时
3.^~
4.~或~*
5.空匹配符,满意以钦定形式初叶时的极度时

先是版配备:
proxy_set_header X-Forwarded-For $remote_addr;

匹配规则是:最大前缀匹配(与各样毫无干系)
设若恰巧是严谨规范匹配结果照旧加有前缀“ ^~ ”或“ =
    则结束搜索正则 location
对此正则 location 的协作规则是:按编写制定顺序每一个万分(与各样有关)
一旦匹配上,就立马停下后边的物色

如上配置只可以扩充负载均衡ip地址,丢失了客户端真实ip和肆意中间代理ip

第三版配置
proxy_set_header X-Forwarded-For “$http_x_forwarded_for,
$remote_addr”;

 

如上安插在原始请求头X-Forwarded-For字段的基本功上加码了一连nginx的服务器ip地址

其三版配备(最为容易)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

实例分析:

$proxy_add_x_forwarded_for已经落到实处了第壹版的效应,直接接纳该内置变量即可

nginx proxy_pass 和 proxy_redirect

proxy_pass:充当代理服务器,转载呼吁proxy_redirect:修改301还是30第22中学间转播进程中的Location。暗许值为proxy_redirect
default。例:location / { proxy_pass
澳门金沙国际,http://192.168.8.46:8080/;
#/结尾 #proxy_redirect default #此为暗中同意值,加不加都无差异。
}那样代理到别的机器的8080端口,访问的时候都没问题,Location:
http://192.168.8.46/haha4/,浏览器的url地址栏也是http://192.168.8.46/haha4/若:location
/ { proxy_pass
http://192.168.8.46:8080;#去掉/
proxy_redirect off #修改暗中认可值default为off }即便去掉最终的/今后,curl
-I
http://192.168.8.46/haha4
访问Location:
http://192.168.8.46:8080/haha4/浏览器访问显示的地点栏为http://192.168.8.46:8080/haha4/,(假设依然前边的,须求先删缓存)能够见见,真实的Location地址全体暴表露来的,这些时候就须要选择proxy_redirect修改那么些Location配置如下:location
/ { proxy_pass
http://192.168.8.46:8080;
proxy_redirect
http://192.168.8.46:8080/haha4/
http://192.168.8.46/haha4/;
}那样,就能修改Location的地点,Location:
http://192.168.8.46/haha4/,在浏览器里也是那般,就不会揭破端口号等音讯,当然,你还能把Location弄到别的网站上去,例如proxy_redirect
http://192.168.8.46:8080/haha4/
http://www.douban.com/;然后浏览器就跳过去了。总计:一切幕后黑手正是proxy_pass
http://192.168.8.46:8080;
不加/结尾,只要把/加上,proxy_redirect 用默许值就OK了。

proxy_redirect http://csdn123.com http://$host:$server_port

http://blog.csdn.net/tjcyjd/article/details/50897959
http://blog.csdn.net/xyang81/article/details/51989079
http://blog.csdn.net/hellolingyun/article/details/34093223
https://www.douban.com/note/572705644/?from=tag

         location = / {  configuration A }

         # =
表示精确的检索地址,如location = /  它只会匹配uri为/的央求,

       
 假使请求为/index.html,将寻找其余的location,而不会同盟这些,
         当然能够写多少个location,location = /和location
/,这样/index.html将匹配到后者
       
 借使你的站点对/的请求量较大,可以应用那些法子来加快请求的响应速度。

 

        location  / {  configuration B  }

          # 服从普通location 的最大前缀匹配,由于别的UMuranoI 都必将以“/ ”根初始,所以对于一个U汉兰达I ,假设有更specific 的
         
匹配,那自然是选这些更specific 的,如若没有,“/ ”一定能为这几个U君越I 垫背(至少能匹配到“/ ”),也正是说“
                    location /
{} ”有点私下认可配置的味道,别的更specific的配置能覆盖overwrite 这几个暗许配置
       
          (那也是干吗大家总能看到location /
{} 那些布局的二个很重点的原因)

 

         location ^~ {  configuration C }

# 匹配任何已起头的查询并且截止搜索。任何正则表达式将不会被测试。

location ~* .(gif|jpg|jpeg)$ {   configuration  D }

# 匹配任何已.gif、.jpg 或 .jpeg 结尾的乞请,不过 全体  起始的呼吁 会匹配到  configuration C

 

       location  @named {  configuration
 E } 
       #它是特地用来拍卖“内部重定向(internally
redirected )

 

 

相关文章