conf配置文件解析,正则表达式
分类:pc28.am神测网

语法: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目录下


1、定义Nginx运营的客户和顾客组

user nginx nginx;

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

worker_processes 1;

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

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

4、进度文件

pid /var/run/nginx.pid;

5、职业情势与连接数上限:worker_connections是单个后台worker process进度的最大并发链接数,并发总的数量是 worker_processes 和 worker_connections 的乘积, 即 max_clients = worker_processes * worker_connections

events {
    worker_connections  1024;
}

6、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压缩输出

7、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:WindowsSystem32driversetchosts)

nginx协助三类别型的 虚构主机配置

  • 1、基于ip的虚构主机, (一块主机绑定两个ip地址)
server{
  listen       192.168.1.1:80;
  server_name  localhost;
}
server{
  listen       192.168.1.2:80;
  server_name  localhost;
}
  • 2、基于域名的设想主机(servername)
#域名可以有多个,用空格隔开
server{
  listen       80;
  server_name  www.nginx1.com www.nginx2.com;
}
server{
  listen       80;
  server_name  www.nginx3.com;
}
  • 3、基于端口的设想主机(listen不写ip的端口情势)
server{
  listen       80;
  server_name  localhost;
}
server{
  listen       81;
  server_name  localhost;
}

server下的location映射剖析(官方中文文书档案:ngx_http_core_module卡塔 尔(英语:State of Qatar)相称准绳:location [ = | ~ | ~* | ^~ ] uri { ... }

location URI {}:

对方今路径及子路线下的保有指标都看到成效;

location = URI {}:

确切相称内定的路径(注意UOdysseyL最棒为现实路径卡塔 尔(阿拉伯语:قطر‎,不满含子路线,因而,只对近来财富生效;

location ~ URI {}:

location ~* URI {}:

情势相配ULX570I,此处的U奥迪Q3I可采取正则表明式,~区分字符大小写,~*不区 分字符大小写;

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配置法则

1、“ =”前缀的吩咐严酷相配那些查询。借使找到,结束寻找。
2、全数盈余的常规字符串,相配最标准的(平日最长的要命卡塔 尔(阿拉伯语:قطر‎。如若那一个匹配使用^〜前缀,寻找结束。
3、正则表明式,在布置文件中是从上往下相称的
4、假设第3条准则产生相称的话,结果被选择。不然,好似从第2条法规被使用
破例处境:
几种情景下,没有必要持续合作正则 location :
( 1 ) 当普通 location 后面钦定了“ ^~ ”,特别告知 Nginx 本条普 通 location 风度翩翩旦相配上,则不供给持续正则相称。
( 2 ) 当普通location 恰巧严苛相称上 ,不是最大前缀相配,则不再接续协作正则

 

在nginx中配置proxy_pass时,当在后头的url加上了/,约等于是相对根路线,则nginx不会把location中特别的门径部分代理走;若无/,则会把匹配的路子部分也给代理走。

 

上边多种状态分别用 实行访谈。

第一种:

location  /proxy/ {

          proxy_pass ;

}

会被代理到 这个url

 

第二本身(相对于第生龙活虎种,最终少四个 /)

location  /proxy/ {

          proxy_pass ;

}

会被代理到 这个url

 

第三种:

location  /proxy/ {

          proxy_pass ;

}

会被代理到 这个url。

 

第两种情况(相对于第三种,最后少叁个 / ):

location  /proxy/ {

          proxy_pass ;

}

会被代理到 这个url

 

上面的结果都是本人结合日志文件测量试验过的。从结果能够见见,应该说分为二种情形才正确。即 (上面包车型地铁第三种) 这种和 .... (上边的第1,3,4种)这种。

hosts,本地质度量试

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

另外nginx的反向代理、Tengine(Nginx的晋级换代版卡塔尔国的健康检查 也采纳了location知识,能够去拜谒

  1.  语法格式:location [=|~|~*|^~|@]   /uri/ { … } ,
       依靠差异的前缀“= ”,“^~ ”,“~ ”,“~* ”和不带任何前缀的(因为[ ] 表示可选,可以毫不的卡塔 尔(英语:State of Qatar),表明不一致的意思, 
      总来讲之尽管location 的/uri/ 配置相仿,但前缀不风姿罗曼蒂克致,表明的是不相同的授命含义。
        注意:查询字符串不在U途锐I范围内。举例:/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的正则能相称的话,则选取正则表达式最长的不得了。卡塔 尔(英语:State of Qatar)

nginx先检查UEnclaveI的前缀路线,在这里些路子中找到最纯粹相配央求U途观I的门道。然后nginx按在配备文件中的现身顺序检查正则表明式路线,匹配上某些路线后即截至相称并动用该路线的铺排,不然使用最大前缀相配的不二等秘书籍的布局。

 

~ 代表实行叁个正则相称,区分朗朗上口写

接受”=”前缀能够定义U大切诺基I和路径的准确相配。若是发现相称,则结束路线查找。举例央求”/”很频仍,定义”location = /”能够增长这几个诉求的管理速度,因为查找进度在第4回相比较过后即甘休。

详见表明:

~* 示推行多个正则相配,不区分抑扬顿挫写

配成对先行级

~       区分抑扬顿挫写相称

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

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

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

!~*不区分朗朗上口写不包容

!~      区分抑扬顿挫写不合作
        !~*    不区分轻重缓急写不相配

^~ 开始表示uri以有些常规字符串开头,掌握为相称 url路线就可以。

^      以怎么样初步的合营

nginx不对url做编码,由此须求为/static/百分之三十/aa,

$      以怎么样最终的匹配

能够被平整^~ /static/ /aa相配到(注意是空格卡塔 尔(阿拉伯语:قطر‎。

*      代表私下字符

last其实就一定于三个新的url,对nginx举办了三回呼吁,须要走三遍大多数的管理进度,最要害的是会做一回find config,提供了贰个方可转到其余location的配备中拍卖的时机,而break则是在一个伸手管理进程少校原本的url(满含uri和args)改写之后,在世襲张开末端的管理,那么些重写之后的诉求始终都以在同二个location中拍卖。

     

4、location ULANDI相称准则

     文件及目录相配

当nginx收到叁个伸手后,会截取央求的U翼虎I部份,去搜寻全部location指令中定义的UPAJEROI相称方式。在server模块中能够定义三个location指令来合营差别的url供给,八个例外location配置的U奥迪Q3I相配形式,总体的相配原则是:先相配普通字符串格局,再相配正则格局。只识别URAV4I部份,比方乞求为:/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中找到第3个相称项后,就以此项为末段相称结果
    所以正则相称项相配准则,受定义的前后相继影响,但日常相配情势不会
    5> 要是未找到正则相称项,则以3中缓存的结果为最终相配结果
    6> 若是贰个合营都没搜索到,则赶回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准则
    1、上边是足以用来判断的表明式:
    -f和!-f用来剖断是还是不是存在文件
    -d和!-d用来决断是还是不是留存目录
    -e和!-e用来推断是或不是留存文件或目录
    -x和!-x用来判别文件是或不是可进行
    2、上面是足以看成推断的全局变量
    $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指令与UMuranoI哀告生成。
    $query_string #与$args相同。
    $scheme #HTTP方法(如http,https)。
    $server_protocol #央浼使用的商业事务,平日是HTTP/1.0或HTTP/1.1。
    $server_addr #服务器地址,在实现一回系统调用后能够规定那个值。
    $server_name #服务器名称。
    $server_port #恳求到达服务器的端口号。
    $request_uri #满含倡议参数的原始U陆风X8I,不包蕴主机名,如:”/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 的最大前缀相称,由于其余UEscortI 都自然以“/ ”根开首,所以对于几个UEscortI ,若是有更specific 的           相称,这当然是选这几个更specific 的,若无,“/ ”一定能为那一个U大切诺基I 垫背(起码能合作到“/ ”卡塔 尔(阿拉伯语:قطر‎,也便是说“                     location / {} ”有一点暗许配置的含意,别的更specific的安排能覆盖overwrite 那些私下认可配置        
          (那也是为啥大家总能看到location / {} 那么些布局的一个很主要的缘由卡塔 尔(英语:State of Qatar)

 

         location ^~ {  configuration C }

# 相称任何已初阶的查询並且结束搜索。任何正则表明式将不会被测验。

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

# 相称任何已.gif、.jpg 或 .jpeg 结尾的号召,不过 全部  初叶的伸手 会相称到  configuration C

 

       location  @named {  configuration  E } 
       #它是特意用来管理“内部重定向(internally redirected 卡塔尔

 

 

本文由pc28.am发布于pc28.am神测网,转载请注明出处:conf配置文件解析,正则表达式

上一篇:你必获悉道到的Hook,钩子监听 下一篇:没有了
猜你喜欢
热门排行
精彩图文
  • conf配置文件解析,正则表达式
    conf配置文件解析,正则表达式
    语法:location [ = | ~ | ~* | ^~ ] uri {…风流洒脱组命令… } 一、 location 的匹配符 Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... }     nginx的
  • Foxmail邮件收取博客园集团邮件配置
    Foxmail邮件收取博客园集团邮件配置
  • Xshell连接本地
    Xshell连接本地
    1、打开Virtualbox软件,运维ubuntu虚构机。 Ctrl Alt T 展开终端输入一下命令: sudo apt-get update 然后安装ssh输入:sudo apt-get install ssh 最后关闭设想机 2、修改虚
  • cocoapods的技术活,1系统出现C0000034正在应用更新
    cocoapods的技术活,1系统出现C0000034正在应用更新
       说来也意外,小编Dell笔记本后天系统提示有校订,作者对系统实行了立异,可明天开机后,就现身了C0000034正在利用立异操作的情形,且计算机一贯没
  • Shell系列教程之
    Shell系列教程之
      Shell协助自定义变量。 Linux Shell体系教程之(三卡塔 尔(英语:State of Qatar)Shell变量,linuxshell 本文是Linux Shell系列教程的第(三)篇,更多shell教程请看