监听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. 跨平台移动框架iMAG开发入门

    iMAG是一个非常简洁高效的移动跨平台开发框架,开发一次能够同一时候兼容Android和iOS平台,有点儿Web开发基础就能非常快上手.当前移动端跨平台开发的框架有非常多,但用iMAG另一个优点,就是 ...

  2. Windows下一个JSP环境配置

    一.首先安装JDK 门户: http://write.blog.csdn.net/postedit/39999433 二.安装Myeclipse 事实上也能够安装eclipse然后再安装Myeclip ...

  3. [Django](1093, "You can't specify target table 'fee_details_invoices' for update in FROM clause") 错误

    dele_id = Fee_details_invoices.objects.filter(fee_detail_id__in=fee_id_list, return_type='2').values ...

  4. Qt中截图功能的实现

    提要 需求:载入一张图片并显示,能够放大缩小,能够截取图片的某个矩形并保存. 原以为蛮简单的一个功能,事实上还是有点小复杂. 最简单Qt图片浏览器能够參考Qt自带的Demo:Image Viewer ...

  5. 索尼 LT26I刷机包 X.I.D 增加官方风格 GF A3.9.4 各方面完美

    ROM介 FX_GF_A系列是具有官方风格的.稳定的.流畅的.省电的.新功能体验的.最悦耳音效体验的ROM. FX_GF_A更新日志 ☆ GF_3.9.4 更新信息 ☆ 更新播放器 ☆ 更新adsp数 ...

  6. NSOperation 的使用(下载相关) 图片和文件都是能够的 断点续传 图片逐渐显示

    // // ImageDownloader.h // NSOperationTest // // Created by ydc on 11-10-29. // Copyright 2011年 __My ...

  7. trie + 长度优先匹配,生成串

    import com.google.common.collect.Maps; import java.util.Map; /** * tree 节点 * Created by shuly on 16- ...

  8. org.apache.subversion.javahl.ClientException: svn: E155021: This client is too old to work with the

    org.apache.subversion.javahl.ClientException: svn: E155021: This client is too old to work with the ...

  9. JavaScript对象(来自百度知道)

    JavaScript中对象的创建有以下几种方式: (1)使用内置对象(2)使用JSON符号(3)自定义对象构造 一.使用内置对象 JavaScript可用的内置对象可分为两种:1,JavaScript ...

  10. CAS实现SSO单点登录原理(转)

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...