`
bollaxu
  • 浏览: 219519 次
  • 性别: 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

    而对于HTTP端口,则不需要SSL指令和证书密钥的配置。 需要注意的是,在配置Nginx监听多个域名和HTTPS时,应该避免端口占用冲突。当遇到端口占用错误提示“nginx:[emerg]bind() to *.*.*.*:xxxx failed (98:Address ...

    Nginx配置SSL证书监听443端口

    Nginx配置SSL证书以监听443端口的方法是网络安全和Web服务器管理中的一项重要技能。443端口是HTTP安全套接字层(HTTPS)服务的标准端口,而SSL(安全套接字层)是一种安全协议,用于为互联网通信加密,保障数据传输...

    windows下nginx配置https以及同一个端口监听多个网站即监听多个虚拟主机

    在Windows环境下,配置Nginx以支持HTTPS及在同一端口监听多个网站,即配置多个虚拟主机,是一项常见的网络服务设置任务。Nginx是一个高性能的HTTP和反向代理服务器,以其稳定性、高并发处理能力而受到广泛使用。下面...

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

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

    普通用户启动nginx,使用80端口

    ### 普通用户启动Nginx并使用80端口的方法详解 #### 背景介绍 在Linux系统中,默认情况下,只有root用户才能绑定1024以下的端口号,包括常用的Web服务端口80(HTTP)和443(HTTPS)。然而,在某些场景下,出于安全...

    https通信nginx反向代理443端口

    在IT行业中,HTTPS通信是确保网站数据安全传输的重要手段,而Nginx作为一款高性能的HTTP和反向代理服务器,常被用来实现这种安全通信。本文将深入探讨如何通过Nginx配置HTTPS服务器,实现443端口的反向代理,以及与...

    Nginx端口映射配置方法

    在这个例子中,Nginx监听80端口的HTTP请求,并将所有到达的请求转发到本地127.0.0.1的8000端口。`proxy_pass`指令是关键,它定义了Nginx将请求传递的目标地址。 对于多端口映射,可以设置多个`location`块来处理...

    nginx rtmp转发服务器

    - 配置Nginx服务器,设置RTMP模块的相关指令,如应用的监听端口、流存储路径等。 - 启动或重启Nginx服务,使其加载新的配置。 4. **配置RTMP转发** 在Nginx配置文件中,可以通过`rtmp`指令定义服务器,然后使用`...

    Nginx中http请求处理过程

    Nginx 需要监听某个 IP 地址和端口,以便接受来自客户端的请求。 2.2 phases[NGX_HTTP_LOG_PHASE + 1] 的初始化 phases 是 Nginx 中的一个数组,用于存储 HTTP 请求处理过程中的各个阶段。在初始化时,Nginx 会将 ...

    nginx + nginx-http-flv-module-1.2.9

    例如,使用 ffmpeg 工具可以将本地视频源推送到 Nginx 的 RTMP 监听端口。 6. **运行与监控** 在 `logs` 目录下,Nginx 的日志文件记录了服务器的运行状态和错误信息,这对于诊断问题和优化性能至关重要。`nginx` ...

    Nginx配置http转https以及https访问http静态资源.docx

    在上面的配置文件中,我们可以看到有两个server块,一个监听443端口,用于https请求,另一个监听80端口,用于http请求。其中,listen指令用于指定监听的端口号,ssl指令用于启用SSL/TLS加密。 在第一个server块中,...

    nginx配置tcp转发(nginx通过白名单访问)

    在这个配置中,`listen`指令指定了Nginx监听的端口,这里是8080。`proxy_pass`则定义了目标服务器的IP和端口,Nginx会将接收到的TCP请求转发到这个地址。 如果你需要实现白名单访问,可以通过Nginx的访问控制功能来...

    集成了nginx-http-flv-module 1.2.9模块的64位nginx-1.21.4程序

    此配置允许Nginx监听80端口,并在`/live`路径下处理FLV流媒体数据。 ### 总结 集成`nginx-http-flv-module`到64位的`nginx-1.21.4`,不仅可以充分利用64位系统的优势,提高处理能力,还能利用HTTP FLV模块提供高效...

    集成了nginx-http-flv-module 1.2.7模块的64位nginx程序

    - **conf**: 配置文件目录,其中的`nginx.conf`是主配置文件,包含了Nginx的各种设置,如服务器块、监听端口、日志配置等。 - **logs**: 日志文件目录,Nginx会将访问日志和其他运行信息写入此目录下的文件。 **...

    doubi.zip_nginx 分发_nginx端口分发

    2. **端口分发**:在Nginx配置中,可以设置不同的监听端口,并根据某些规则(如URL路径、主机头或后缀等)将请求分发到不同的后端服务。例如,所有以特定后缀结尾的请求会被转发到特定端口。 3. **负载均衡**:...

    nginx-http-flv-module-1.2.10(包含nginx-rtmp-module)

    这包括设置监听端口、定义服务器块、添加模块指令等。例如,`rtmp_server`和`rtmp_app`指令用于定义RTMP服务器和应用,`hls`指令开启HLS支持,`hls_path`指定HLS片段存储路径。 4. **网络协议理解** 理解HTTP和...

    nginx修改默认运行80端口的方法

    之前在文章windows下nginx的安装、使用及80端口被占用导致nginx不能启动问题的解决中提到nginx默认使用80端口,而Windows下80端口被系统进程占用的解决办法。但有时候不想让nginx使用80端口,如何修改呢? 修改方法 ...

    升级gitlab中nginx版本.docx

    2. 配置监听TCP端口:配置GitLab系统监听的TCP端口,使其可以与系统自带的Nginx进行通信。 3. 重启GitLab服务:重启GitLab服务,以便其使用系统自带的Nginx。 四、配置Nginx 为使Nginx服务正常工作,需要进行以下...

Global site tag (gtag.js) - Google Analytics