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来确定具体页面的请求.

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

(0)

相关推荐

  • 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

  • 微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)

    微信小程序Server环境配置详解 主要内容: 1. SSL免费证书申请步骤 2. Nginx HTTPS 配置 3. TLS 1.2 升级过程 微信小程序要求使用 https 发送请求,那么Web服务器就要配置成支持 https,需要先申请SSL证书 小程序也要求 TLS(传输层安全协议)的版本至少为 1.2,在配置好 https之后,如果 TLS 的版本较低,就涉及到升级问题 所以 Server端环境配置的主要步骤: 申请 SSL 证书 配置web服务器支持https(我使用的是nginx)

  • SQL Server 2000安全配置详解

    SQL server2000数据库应用非常广泛,一旦出现安全问题,造成的损失往往难以估量!应提前预防,防患于未然.这里,我们主要谈论有关SQL Server2000数据库的安全配置以及一些相关的安全和使用上的问题. 在进行SQL Server 2000数据库的安全配置之前,首先你必须对操作系统进行安全配置,保证你的操作系统处于安全状态.然后对你要使用的操作数据库软件(程序)进行必要的安全审核,比如对ASP.PHP等脚本,这是很多基于数据库的WEB应用常出现的安全隐患,对于脚本主要是一个过滤问题,

  • python编程之requests在网络请求中添加cookies参数方法详解

    哎,好久没有学习爬虫了,现在想要重新拾起来.发现之前学习爬虫有些粗糙,竟然连requests中添加cookies都没有掌握,惭愧.废话不宜多,直接上内容. 我们平时使用requests获取网络内容很简单,几行代码搞定了,例如: import requests res=requests.get("https://cloud.flyme.cn/browser/index.jsp") print res.content 你没有看错,真的只有三行代码.但是简单归简单,问题还是不少的. 首先,这

  • Linux下模拟http的get/post请求(curl or wget)详解

    Linux下模拟http的get/post请求(curl or wget)详解 背景 最近项目中需要测试接口,但是测试服务器通过堡垒机才能访问,暂时又没有通过Nginx进行转发,只好直接在Linux上模拟http请求进行测试. 方法 get请求 curl "http://www.baidu.com" 如果URL指向的是一个文件或者一幅图可以直接下载到本地 curl -i "http://www.baidu.com" 显示全部信息 curl -l "http

  • IOS开发 支持https请求以及ssl证书配置详解

    IOS开发 支持https请求以及ssl证书配置详解 前言: 众所周知,苹果有言,从2017年开始,将屏蔽http的资源,强推https 楼主正好近日将http转为https,给还没动手的朋友分享一二 一.证书准备 1.证书转换 在服务器人员,给你发送的crt证书后,进到证书路径,执行下面语句 // openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der 这样你就可以得到cer类型的证书了.双击,导入电脑. 2.证书放入工程 1.可以直接把转换好

  • SpringBoot之自定义Filter获取请求参数与响应结果案例详解

    一个系统上线,肯定会或多或少的存在异常情况.为了更快更好的排雷,记录请求参数和响应结果是非常必要的.所以,Nginx 和 Tomcat 之类的 web 服务器,都提供了访问日志,可以帮助我们记录一些请求信息. 本文是在我们的应用中,定义一个Filter来实现记录请求参数和响应结果的功能. 有一定经验的都知道,如果我们在Filter中读取了HttpServletRequest或者HttpServletResponse的流,就没有办法再次读取了,这样就会造成请求异常.所以,我们需要借助 Spring

  • nuxt3中server routes的使用详解

    目录 匹配路由参数 Http方法匹配 处理请求体 处理get请求路由参数 最近在学习nuxt3,学习过程中可参考的中文文档并不是特别多,今天在学习server routes的使用方式,可参考的文档就更少了,于是只能自己啃官方文档,顺便记录下自己的学习心得,也希望能够给其他新入门的学习者一点儿借鉴,如有说的不对的地方,欢迎大家指正,在下一定虚心接受. nuxt3在后端服务器这块引入了Nitro框架,感兴趣的朋友可以移步到官方网站进行了解和学习,个人感觉类似nodejs框架里面的express 和

  • java 请求跨域问题解决方法实例详解

    java 请求跨域问题解决方法实例详解 新建Util类,在Util中添加下面方法: /* * response请求跨域公共设置 */ public static HttpServletResponse SetHttpServletResponse( HttpServletResponse response) { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader(&qu

  • 微信小程序request请求后台接口php的实例详解

    微信小程序request请求后台接口php的实例详解 后台php接口:http://www.vueyun.com/good/info 没有处理数据,直接返回了,具体再根据返回格式处理 public function getGoodInfo(Request $request) { $goods_datas = $this->Resource->get(); return response()->json(['status' => 'success','code' => 200,

随机推荐