首页 技术 正文
技术 2022年11月12日
0 收藏 662 点赞 4,692 浏览 1698 个字

监听port属于server虚拟主机,由server{}块内的listen配置项决定。

也就是说,在server{}块配置项内定义了该虚拟主机所要监听的port。

在处理配置文件http块内main级别的配置项时。每一个HTTP模块都会调用create_main_conf、create_srv_conf、create_loc_conf三个方法建立三个结构体。用来分别存储http块、server块、location块内的配置项。

ngx_http_core_module是HTTP模块。所以它会调用ngx_http_module_t接口内的ngx_http_core_create_main_conf方法创建存储main级别配置项的结构体,函数例如以下:

static void *
ngx_http_core_create_main_conf(ngx_conf_t *cf)
{
ngx_http_core_main_conf_t *cmcf; .... return cmcf;
}

从代码能够看出创建了一个ngx_http_core_main_conf_t结构体用于存储配置项。此结构体定义例如以下:

typedef struct {
....
ngx_array_t *ports; /* 保存http块配置项内监听的全部端口 */
....
} ngx_http_core_main_conf_t;

当中的ports成员就保存着全部须要监听的端口。

每个端口用结构体ngx_http_conf_port_t表示:

typedef struct {
ngx_int_t family;
in_port_t port;
ngx_array_t addrs; /* array of ngx_http_conf_addr_t */
} ngx_http_conf_port_t;

port成员就保存要监听的port,而addrs成员则保存有一系列的IP地址,每个地址用一个ngx_http_conf_addr_t表示,每个IP地址都与一个port绑定。比如:

  • 127.0.0.1:8000
  • 173.39.160.51:8000

这样。假设一台机器有多个IP。就行同一时候监听这些IP的port了。假设配置项直接就是listen 80,那么相当于默认监听该port下的全部地址,即*.80。
以下再来看看ngx_http_conf_addr_t的定义:

typedef struct {
ngx_http_listen_opt_t opt; ngx_hash_t hash;
ngx_hash_wildcard_t *wc_head;
ngx_hash_wildcard_t *wc_tail;#if (NGX_PCRE)
ngx_uint_t nregex;
ngx_http_server_name_t *regex;
#endif /* the default server configuration for this address:port */
ngx_http_core_srv_conf_t *default_server;
ngx_array_t servers; /* array of ngx_http_core_srv_conf_t */
} ngx_http_conf_addr_t;

这里关注servers数组,它把监听的port与server{}虚拟主机关联起来了。什么意思呢?假如ngx_http_conf_addr_t相应的port为8080,且servers成员包括虚拟主机A和虚拟主机B,那么在这两个块配置项中就存在listen 8080这个配置项。

也就是说。每一个监听地址ngx_http_conf_addr_t中的servers数组中关联着监听地址相应的server{}虚拟主机。

总的关系图例如以下:

从上图的关系中能够得出例如以下事实:

  • server A虚拟主机监听了两个port。各自是*.80和127.0.0.1:8000
  • server B虚拟主机监听了三个port。各自是*.8080、*.80、173.39.160.51:8000

參考:《深入了解Nginx》 P367-P369.

版权声明:本文博主原创文章,博客,未经同意不得转载。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,495
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,909
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,741
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,496
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,134
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,298