简单梳理一下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的配置

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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 { … }

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

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

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

  1. 默认请求。
  2. 页面请求.
  3. 后台逻辑请求.

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。

#这里是直接转发给后端应用服务器了,也可以是一个静态首页

# 第一个必选规则

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

ngnix的简单转发请求之server和location配置详解相关推荐

  1. CentOS Linux下VNC Server远程桌面配置详解

    PS:偶以前基本不用Linux的远程图形桌面,前几天有开发的同事配置CentOS的vnc有问题,找我解决,就顺便记录总结一下,这个总结是比较完整的.下面的配置在CentOS5.x和6.x.SUSE企业 ...

  2. asp.net 获取计算机配置_PBI Report Server 部署与配置详解

    12月18日追加:欢迎加入知乎-微软BI技术圈,一起讨论.分享包括PowerBI在内的一切BI话题! [前述]关于Power BI 报表服务器的安装与配置,国内外的教程有很多,但较为全面的介绍却少之又 ...

  3. IPTABLES简单应用说明和Linux下IPTABLES配置详解

    如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置一个filter表的防火墙. (1)查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables -L -n C ...

  4. VNC CentOS Linux下VNC Server远程桌面配置详解

    VNC概述 VNC (Virtual Network Console)是虚拟网络控制台的缩写.VNC 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的.VNC 是在基于 ...

  5. centos linux下vnc server远程桌面配置详解,CentOS 6.0 VNC远程桌面配置

    引言: 必须明白: vncserver在调用的时候,会根据你的配置来启用server端的监听端口, 端口默认是从5900开始,再加上你的桌面号. 比如你的桌面号为1,则vnc的连接端口号为5900+1 ...

  6. VNC Server远程桌面配置详解

    图形化界面展示,利于不习惯命令行人员操作,注意:实例均为root用户操作. 参考:https://blog.51cto.com/357355/615789 https://www.cnblogs.co ...

  7. Tomcat 的 Server 文件配置详解

    转载自  Tomcat 的 Server 文件配置详解 前言 Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛.server.xml是Tomcat中最重要的配置文件, ...

  8. SQL Server DBA工作内容详解

    原文:SQL Server DBA工作内容详解 在Microsoft SQL Server 2008系统中,数据库管理员(Database Administration,简称为DBA)是最重要的角色. ...

  9. ngnix的upstream模块配置详解

    2019独角兽企业重金招聘Python工程师标准>>> ngnix的upstream模块配置详解 2017年04月04日 13:10:03 阿里-橙鹰-潘民兰 阅读数:15409 标 ...

最新文章

  1. 进程间通信IPC之--共享内存
  2. DBeaverEE7.3.0安装教程
  3. linux中多线程解析
  4. SQL SERVER学习笔记(二)数据库管理
  5. 贝叶斯分层回归模型的推理、EM求解和Java编程
  6. ubuntu 12.04 php5.3 降级为 5.2
  7. Nginx学习总结(14)——Nginx配置参数详细说明与整理
  8. 一篇google developer 安全介绍的翻译
  9. js中将html文档写入静态界面当中
  10. swoole实现Timer定时器、心跳检测及Task进阶实例:mysql连接池
  11. java awt 教程_JAVA教程第五讲AWT图形用户界面设计
  12. Windows10下安装linux(Utunbu)双系统
  13. 搜狗新闻爬取怎么破解反爬机制呀,求指教
  14. 一次搞定亚马逊 Used Sold as New 二手品申诉,速度 Get!
  15. 微软开始彻底封杀IE浏览器
  16. 真的羡慕玉自寒和烈如歌的爱情
  17. 基于MATLAB/Simulink的电力电子电路仿真技术——三相电流滞环跟踪逆变器
  18. 自己最近在补天测试总结的一般思路
  19. 基于STM32智能小车->电机驱动
  20. 〖Python接口自动化测试实战篇②〗- 摒弃 ‘捉虫师’ 称号 - 你需要重新认识软件测试

热门文章

  1. mha数据备份_MySQL备份与恢复之保证数据一致性(5)
  2. android 广播 event,无法接收android.intent.action.EVENT_REMINDER广播
  3. Python3机器学习工具包基础复习
  4. 2.1秒破百,马斯克宣称最安全、最快、最酷、最好的车,106个W,你会买单吗?
  5. sublime text3 常用配置
  6. 01背包、完全背包、多重背包问题的C++实现
  7. keil编译运行错误,缺少error:#5:#includecore_cm3.h_过路老熊_新浪博客
  8. java多线程-生产者消费者模式
  9. 【十】JDBC:使用 jmeter 批量在数据库创建 1 万多条数据;批量删除重复数据
  10. Android添加拍照功能,Android相机开发(二): 给相机加上偏好设置