Nginx配置实战

一、虚拟主机(virtual host)

    详见官网(搜关键词location):http://nginx.org/en/docs/http/request_processing.html

   (1)假设所有server { } 均listen 端口 * : 80,在形如以下这种配置,nginx仅根据请求header中的“Host”字段来进行路由选择对应的虚拟server。如果没有匹配到任何server_name或者请求header中没有“Host”字段,则nginx匹配此端口对应的默认虚拟server。在这里就是排在第一位的虚拟server,这也是nginx标准的默认server选择方式;但也可以指定默认server,0.8.21以上版本形如listen  80  default_server,早期版本中形如listen  80 default。

特别的,指定默认server是监听端口的属性,而不是server_name的属性。

       server {

                                listen      80;

                                server_name  example.org  www.example.org;

                                ...

           }

   (2)假设所有server{ } 均listen具体的 ip:port,在形如以下这种配置,nginx会对照server块中的listen配置,先测试请求的IP/Port,然后在匹配到的server块中再接着测试请求header中的“Host”字段,若在该server块中没有server_name匹配此“Host”,则请求会被相应的默认server所处理。由于default是listen的属性,因此不同的ip:port可以分别指定为相应的默认server。

          server {

                listen      192.168.1.1:80;

                server_name example.org www.example.org;

                ...

      }

   (3)阻止没有“host”字段的请求,server可以直接丢弃这类请求,按以下方式配置。非标准码444意为关闭连接,0.8.48以上版本中 server_name的默认设置就是"",因此这里可以省略不写"",而在早期版本中默认的server_name是主机的hostname。

      server{

                listen      80;

                server_name "";

                return     444;

      }

二、location匹配规则

    详见官网(搜关键词location):http://nginx.org/en/docs/http/request_processing.html

网上半桶水货的讹传太多,官网才是权威的来源。。。

   (1)首先搜索最长匹配的文字字符串规则(即非正则表达式规则),不管这些常规的文字字符串规则是按照什么顺序先后出现的,即这些常规文字字符串规则出现的先后顺序不影响nginx匹配文字字符串规则的结果。

   (2)其次搜索匹配的正则表达式规则,按照正则表达式规则出现的先后顺序进行匹配,一旦匹配上则停止继续搜索正则表达式规则,并执行该正则表达式所对应的location块。

   (3)最后若没有搜索到匹配的正则表达式规则,则使用在(1)中搜索到的最长匹配的文字字符串规则。

特别的:location / { }可以匹配所有的请求,因此其在最长文字字符串匹配规则中的优先级也是最低的,location规则仅匹配请求行中的URI段而不匹配请求参数。

当请求是 / 时,只会被匹配到location / {index xxx yyy},此时index指令会先后测试这些指定的index files,假设index指令形如index index.html index.php;若index.html不存在而index.php存在,则nginx会重新发起一个内部重定向,重新进行location匹配,就好像这个请求是从客户端发起的。

另外,目前location的正则匹配规则中没有取“非”语法。

三、context继承性

nginx配置文件采用树形结构组织,使用一系列的括弧({ })嵌套来定义层次结构,在nginx中这些括弧所定义的区域被称为“contex”。由于一个context可以被另一个context所包含,nginx提供了指令的继承级别:如果一个指令在多个嵌套的区域内有效,那么在更宽泛的context下所定义的指令将会被传递到child contexts并作为其默认值;child contexts也可以随意覆盖这些值。

     main
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值