`
bollaxu
  • 浏览: 217132 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Nginx http端口监听

阅读更多

server {} block里面的"listen"指令调用了ngx_http_core_listen()函数

 

ngx_http_core_listen(...)
{
	ngx_http_core_srv_conf_t *cscf = conf;
	ngx_http_listen_opt_t   lsopt;

	/*根据配置的参数设置lsopt*/
	//...

	ngx_http_add_listen(cf, cscf, &lsopt);
}

ngx_http_add_listen(...)
{
	cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
	//...

	port = ngx_array_push(cmcf->ports);
	ngx_http_add_address(cf, cscf, port, lsopt);
}
ngx_http_add_address(...)
{
	ngx_http_conf_addr_t  *addr;
	addr = ngx_array_push(&port->addrs);
	//...
	ngx_http_add_server(cf, cscf, addr);
}

ngx_http_add_server(...)
{
	ngx_http_core_srv_conf_t  **server;
	server = ngx_array_push(&addr->servers);
	*server = cscf;
}
 

可以看到,上面的几个函数基本上就是把当前server的ngx_http_core_srv_conf_t关联到port->addrs->servers和port->addrs->default_server,而每个port又是cmcf->ports的一员。

在http_block()函数的最后会调用到ngx_http_optimize_servers(cf, cmcf, cmcf->ports)。

 

ngx_http_optimize_servers(...)
{
	//对于每个cmcf->ports的成员port[p]
	for(;;){
		//...
		ngx_http_init_listening(cf, &port[p]);
	}
} 
ngx_http_init_listening(...)
{
	addr = port->addrs.elts;
	//对于port的每个addr[i]
	while(...){
		//...
		//从cf->cycle->listening数组分配内存给ls并初始化(如ls->handler,ls->sockaddr等)
		ls = ngx_http_add_listening(cf, &addr[i]);
		hport = ngx_pcalloc(cf->pool, sizeof(ngx_http_port_t));
		ls->servers = hport;
		//把addr[i]的default_server关联到hport(即ls->servers)的成员addrs
		ngx_http_add_addrs(cf, hport, addr);
		//...
	}
}
  

注:上面的函数都是在http_block()里面调用的,比如当在http{...} block里面解析到server{...},又会继续在server{...} block解析,当解析到"listen"的时候, 调用了ngx_http_core_listen()。

而整个的配置读取和解析, 是在main()函数的ngx_init_cycle()里面调用了ngx_conf_parse()。

在上面的配置解析完之后, 在ngx_init_cycle()里面又调用了ngx_open_listening_sockets()创建、bind()和listen() socket。

在之后每个子进程中, ls->fd会被关联到一个connection并添加到事件监听 (如果获得mutex); ngx_http_init_request()中,ls->servers就被用来找到处理请求的那个server{...} block的cscf。





分享到:
评论

相关推荐

    详解nginx同一端口监听多个域名和同时监听http与https

    主要介绍了详解nginx同一端口监听多个域名和同时监听http与https的相关资料,需要的朋友可以参考下

    微信小程序中文转码的MD5加密,nginx同一端口监听多个域名和同时监听http,http

    一:nginx同一端口监听多个域名和同时监听http,https 分享者:weikle,来自原文地址  1、同一端口监听多个域名  如今公网ip资源越来越珍贵,多域名监听应用非常广泛,就是用一个端口,比如80或者443,监听多个入口...

    Nginx配置SSL证书监听443端口

    在nginx.conf的http{}中填下如下内容 server { listen 443; server_name www.httpstest.com; ssl on; root html; index index.html index.htm; #这里的.pem/.key文件替换成自己对应的文件名 ssl_certificate...

    Nginx的反向代理实例详解

    (1)使用Nginx反向代理,根据访问的路径跳转到不同端口的服务中,Nginx监听端口为8001。 访问 http://127.0.0.1:9001/deu/ 直接跳转到127.0.0.1:8016 访问 http://127.0.0.1:9001/vod/ 直接跳转到127.0.0

    nginx 代理80端口转443端口的实现

    nginx.conf配置文件如下 user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; ...

    win版本带nginx-rtmp模块

    HTTP监听 8080 端口, * :8080/stat 查看stream状态 * :8080/index.html 为一个直播播放与直播发布测试器 * :8080/vod.html 为一个支持RTMP和HLS点播的测试器 # 注意 不支持exec # 直播测试工具 内置了一个方便...

    Nginx服务器中配置非80端口的端口转发方法详解

    nginx可以很方便的配置成反向代理服务器:  server {  listen 80;  server_name localhost;  location / {  proxy_pass http://x.x.x.x:9500;  proxy_set_header Host $host:80;  proxy_set_header X-Real-...

    nginx-rtmp-win32

    HTTP监听 8080 端口, * :8080/stat 查看stream状态 * :8080/index.html 为一个直播播放与直播发布测试器 * :8080/vod.html 为一个支持RTMP和HLS点播的测试器 # 注意 不支持exec # 直播测试工具 内置了一个方便...

    Linux 按照部署 Nginx 服务器 及相关依赖 - Nginx 配置讲解

    1. 服务端口和服务器块:配置Nginx监听的端口和定义服务器块。服务器块可以包含多个指令,用于配置虚拟主机、域名解析等。 2. HTTP协议配置:在HTTP块中配置Nginx的行为,如请求头大小、客户端请求超时时间、代理...

    (5)Nginx 配置实例二 反向代理

     使用Nginx反向代理,根据访问的路径跳转到不同端口的服务中,Nginx监听端口为9001 访问http://127.0.0.1:9001/bs-manager/ 直接跳转到127.0.0.1:8001 访问http://127.0.0.1:9001/bs-webapp/ 直接跳转到...

    nginx + tomcat 集群配置

    -- port="18081" tomcat监听端口,随意设置,别太小 --> <Connector port="18081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 第三处端口修改: Engine元素增加...

    iis+nginx实现负载均衡的详细步骤

    nginx把监听的端口的请求平均转到布署了网站的服务器。 一、windows上安装nginx 1.官网下载windows版的nginx http://nginx.org/en/docs/windows.html 目前最新版本为1.13.2 2.下载解压后 3.因为我电脑80端口已经...

    nginx.conf

    nginx配置文件的详细介绍。...#当需要对同一端口监听多个域名时,使用如下配置,端口相同域名不同,server_name也可以使用正则进行配置  #但要注意server过多需要手动扩大server_names_hash_bucket_size缓存区大小

    ansible-role-nginx-proxy:安装Nginx用作前端代理

    Nginx代理 安装Nginx用作前端代理。 依存关系 需要nginx角色(自动包含)。 角色变量:主要的Nginx配置 nginx_proxy_worker_... nginx_proxy_listen_http :监听此端口,默认为80 。 nginx_proxy_cachebuster_port

    nginx反向代理webSocket配置详解

    我擦,我的https已经监听了443端口,webSocket再去监听443,肯定不行啊。要想办法解决,老大把这个问题交给我了,我愉快(手动懵逼)的接收了这个任务。想到了两种办法解决。一种解决办法是把webSocket部署到另一台...

    nServer-v2.1023[FTP + MYSQL + HTTP + PHP(FCGI)]

    - 修正Nginx在Windows2003无法监听端口的问题 2011年11月5日 - 更新Nginx版本到1.0.9 - 将Nginx子进程数设置为2,单进程连接数提高到3072 - 允许设置多个错误处理页面 - 允许设置多个PHP处理配置 2011年10月8日 - ...

    搭建nginx网站服务器

    搭建nginx网站服务器 主配置文件:# vim /etc/nginx/nginx.conf* ...监听端口:80 默认目录:/usr/share/nginx/html 日志文件:error_log /var/log/nginx/error.log; ​ error_log /var/log/nginx/acce

    给 Frp 穿透的内网 Web 上 https.doc

    第一方法是在服务器端...Nginx监听80和443端口,把来自域名的请求,通过Nginx的反向代理转发给frps监听的端口(比如7000),再由frps在转发给frpc处理http响应。在Nginx里配置上https证书,由Nginx实现ssl的加密解密。

Global site tag (gtag.js) - Google Analytics