• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ngnix的简单转发请求之server和location配置详解

    简单梳理一下nginx中关于server 和location的配置.

    比如URL:www.mask_dev2.com:9999/login/

    server管的前半部分,即:www.mask_dev2.com:9999

    location管的是后半部分,即:/login/

    一个nginx可以配置多个server。

    每个server可以配置多个location。

    URL的前半部分控制选择哪一个server,后半部分控制选择哪一个location,最终决定往哪里去请求.

    server的配置

    server {
     listen 9999;
     server_name www.mask_dev2.cn;
     location / {
      default_type text/html;
      content_by_lua '
       ngx.say("<p>first</p>")
      ';
     }
    }
    
    server {
     listen 9999;
     server_name www.mask_dev2.*;
     location / {
      default_type text/html;
      content_by_lua '
       ngx.say("<p>second</p>")
      ';    
     }
    }
    
    server {
     listen 9998;
     server_name _;
     location / {
      default_type text/html;
      content_by_lua '
       ngx.say("<p>third</p>")
      ';
    
     }
    }

    首先,请求nginx的地址,肯定是请求的nginx所在的服务器,也就是说ip是固定的。

    也就是说,无所谓server_name是什么,都是指的当前服务器.

    那么当前服务器是怎样对应多个域名呢,这个只需要在相应的dns服务器中进行添加,就行了,比如暂时把本机当成dns服务器,修改hosts

    127.0.0.1 localhost
    127.0.0.1 www.mask_dev2.cn
    127.0.0.1 www.mask_dev2.com

    server匹配顺序

    server_name与host匹配优先级如下:

    1、完全匹配
    2、通配符在前的,如*.test.com
    3、在后的,如www.test.*
    4、正则匹配,如~^\.www\.test\.com$

    如果都不匹配

    1、优先选择listen配置项后有default或default_server的
    2、找到匹配listen端口的第一个server块

    location配置

    找到server之后,再去找具体的location

    server {
     listen 9998;
     server_name _;
     location = / { 
      #规则A 
     } 
     location = /login { 
      #规则B 
     } 
     location ^~ /static/ { 
      #规则C 
     } 
     location ~ \.(gif|jpg|png|js|css)$ { 
      #规则D 
     } 
     location ~* \.png$ { 
      #规则E 
     } 
     location !~ \.xhtml$ { 
      #规则F 
     } 
     location !~* \.xhtml$ { 
      #规则G 
     } 
     location / { 
      #规则H 
     } 

    语法规则:

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

    1. = 开头表示精确匹配
    2. ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ static /aa匹配到(注意是空格)。
    3. ~ 开头表示区分大小写的正则匹配
    4. ~*  开头表示不区分大小写的正则匹配
    5. !和!*分别为区分大小写不匹配及不区分大小写不匹配 的正则
    6. / 通用匹配,任何请求都会匹配到。
    7. 多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

    首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

    但是一般没有这么复杂,有3点。

    1. 默认请求。
    2. 页面请求.
    3. 后台逻辑请求.
    #直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。 
    #这里是直接转发给后端应用服务器了,也可以是一个静态首页 
    # 第一个必选规则 
    location = / { 
      proxy_pass http://tomcat:8080/index 
    } 
    
    # 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项 
    # 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用 
    location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { 
      root /webroot/res/; 
    } 
    
    #第三个规则就是通用规则,用来转发动态请求到后端应用服务器 
    #非静态文件请求就默认是动态请求,自己根据实际把握 
    #毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了 
    location / { 
      proxy_pass http://127.0.0.1:8080/ 
    } 

    总结

    比如,现在同时启动 前台系统,和后台系统,就可以用两个server(可以配置host为api,admin,或者直接修改端口也可以),每个server中3个location来确定具体页面的请求.

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    上一篇:Docker volume 挂载卷的实现方法
    下一篇:阿里云esc服务器Docker部署单节点Mysql的讲解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    ngnix的简单转发请求之server和location配置详解 ngnix,的,简单,转发,请,求之,