nginx server

背景

nginx是个强大的开源项目,它既能作为一个web服务器,又能做一个反向代理服务器,今天主要说一下nginx做反向代理,反向代理常用来做网络安全,负载均衡等。其中server_name是nginx反向代理的重要字段,因为nginx通过server_name字段来和http请求中的host字段做匹配,进而将不同的请求转发到后台不同的服务器,实现反向代理的功能。

示例demo

我这里只举两个nginx配置例子,如下:

server {

listen 80;

location / {

proxy_pass http://192.168.20.142;

}

}

---------------------------------------------------------------------

server {

listen 80;

location / {

proxy_pass http://192.168.20.141;

}

}

---------------------------------------------------------------------

server_name 匹配优先级

优先级从1到5,优先级从高到低

1、精确匹配:server_name后面的字段是完整的域名或ip

server {

proxy_pass http://192.168.20.142;

}

2、最长通配符前缀匹配

server {

server_name *.test.com;

proxy_pass http://192.168.20.142;

}

3、最长通配符后缀匹配

server {

server_name www.test.*;

proxy_pass http://192.168.20.142;

}

4、正则匹配

server {

server_name ~^(www\.)?(.+)$;

proxy_pass http://192.168.20.122;

}

5、匹配所有host字段

server {

server_name _;

proxy_pass http://192.156.20.1;

}

代码实现

优先级代码实现如下:

1、前三种优先级的代码实现如下

具体实现在ngx_hash_find_combined里

2、正则匹配代码实现如下

每个server_name都有一个srv_conf与他们绑定,如上面,将正则匹配的结果sn[i].server赋值给cscfp。

3、ngx_hash_find_combined代码实现如下

1》精准匹配代码实现如下

2》最长通配符前缀匹配代码实现如下

3》最长通配符后缀匹配代码实现如下

另外,server_name后面可以加多个域名或ip,,如果配置里没有server_name字段,则表明server_name "" ,后面是个空字符串;server_name与default_server字段有关,以后有时间再分享。

各位,晚安~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180113G0Q9UF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券