监听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.

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

【Nginx】显示器port管理的更多相关文章

  1. erlang集群IP及port管理

    erlang集群是依靠epmd维护的,epmd是erlang集群节点间port映射的守护进程.负责维护集群内的节点连接.提供节点名称到IP地址及port的解析服务. epmd 自己定义port号 ep ...

  2. nginx slab内存管理

    本来这一篇作为nginx系列的开头是不合适的,不过由于nginx进程框架自己的梳理还没完成,这部分又刚好整理完了,就从这开始吧.这儿谈的是nginx的slab的内存管理方式,这种方式的内存管理在ngi ...

  3. 从压测碰到的诡异断连问题聊聊Nginx的连接管理

    本文主要分享一个在压测Nginx反向代理服务过程中碰到的连接异常断开问题,包括问题的定位与复现,最后由这个实际问题引申聊一下Nginx的连接管理. 本博客已迁移至CatBro's Blog,那是我自己 ...

  4. nginx的内存管理

    先来看内存池的实现,nginx的内存池实现的非常简单. 这里内存池的一些图表可以看老朱同学的slides : http://blog.zhuzhaoyuan.com/2009/09/nginx-int ...

  5. 利用 gperftools 对nginx mysql 内存管理 性能优化

    利用 gperftools 对nginx 与 mysql  进行 内存管理  性能优化 降低负载. Gperftools 是由谷歌开发.官方对gperftools 的介绍为: These tools ...

  6. Etcd+Confd实现Nginx配置文件自动管理

    一.需求 我们使用Nginx做七层负载均衡,后端是Tomcat.项目采用灰度发布方式,每次项目升级,都要手动先从Nginx下摘掉一组,然后再升级这组,当项目快速迭代时,手动做这些操作显然会增加部署时间 ...

  7. CentOS安装Nginx 以及日志管理

    环境:CentOS-6.4 Nginx版本:nginx-1.6.2.tar Linux连接工具:XShell VMWare虚拟机上准备两台CentOS: 两台机器做同样操作(后边做负载均衡.高可用的时 ...

  8. Nginx的Web管理界面收集

    Nginx实在是太强大了!灰度发布.金丝雀发布.负载均衡就只需要简单的几行配置就可以实现,这些特性嗾使微软无法比拟的. 原来Nginx除了使用ngx_http_stub_status_module模块 ...

  9. linux安装Nginx 以及 keepalived 管理Nginx

    linux安装Nginx 1.1将Nginx素材内容上传到/usr/local目录(pcre,zlib,openssl,nginx)(注意:必须登录用对这个文件具有操作权限的) 1.2安装pcre库 ...

随机推荐

  1. 点集配对问题(状态dp)

    给定n个点(n是偶数)使得两个点两两配对,最后总的距离和最小. 用是表示集合,那么dp[s]表示集合s配对后的最小距离和  , 状态转换方程为  表示集合中任意拿两个元素配对,然后转移为更小的两个集合 ...

  2. Codeforces Round#297 div2

    B: 题意:给定一个字符串,然后给定m个数字 对于每个数字ai的含义是,将ai到n-ai+1的字符串给翻转一遍. 要求输出m次翻转之后的字符串. 想法就是判断第i个位置的字符是翻转了奇数次,还是偶数次 ...

  3. 央视公然诽谤Linux操作系统,谁报告?

    考虑下面的观点: 这是今年5月111日上午11点04分央视播出的一则新闻,题为"工信部希望用户使用国产操作系统(替代XP). 该新闻报道,概念混乱,违背事实,误导公众,谁来举报?现举一例加以 ...

  4. Eclipse+Maven创建webapp项目<一> (转)

    Eclipse+Maven创建webapp项目<一> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...

  5. SVA(system verilog assertions)基础

    1什么是断言: 断言就是在模拟过程中依据我们事先安排好的逻辑是不是发生了,假设发生断言成功.否则断言失败. 2断言的运行分为:预备(preponed)观察(observed)响应(reactive). ...

  6. 解决win10 iot VS编程出现的无法引用错误

    使用NuGet安装 Microsoft.NETCore 5.0 安装 Microsoft.NETCore

  7. 重新想象 Windows 8 Store Apps (30) - 信息: 获取包信息, 系统信息, 硬件信息, PnP信息, 常用设备信息

    原文:重新想象 Windows 8 Store Apps (30) - 信息: 获取包信息, 系统信息, 硬件信息, PnP信息, 常用设备信息 [源码下载] 重新想象 Windows 8 Store ...

  8. 应用层协议系列(两)——HTTPserver之http协议分析

    上一篇文章<抄nginx Httpserver设计与实现(一)--多进程和多通道IO现>中实现了一个仿照nginx的支持高并发的server.但仅仅是实现了port监听和数据接收.并没有实 ...

  9. MongoDB学习笔记-命令

    连接数据库: mongodb://账号:密码@IP/库名 更多方式参考:http://www.runoob.com/mongodb/mongodb-connections.html 命令整理: 名称 ...

  10. PowerDesigner创建物理模型

    原文:PowerDesigner创建物理模型 Using PowerDesigner Create PDM 1.打开PowerDesigner 按Ctrl+N 创建物理模型 2.创建后修改名称,并在工 ...