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

2025-05-26 0 32

简单梳理一下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来确定具体页面的请求.

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

原文链接:https://www.jianshu.com/p/95e5c5454559

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 ngnix的简单转发请求之server和location配置详解 https://www.kuaiidc.com/53261.html

相关文章

发表评论
暂无评论