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。
分享到:
相关推荐
而对于HTTP端口,则不需要SSL指令和证书密钥的配置。 需要注意的是,在配置Nginx监听多个域名和HTTPS时,应该避免端口占用冲突。当遇到端口占用错误提示“nginx:[emerg]bind() to *.*.*.*:xxxx failed (98:Address ...
Nginx配置SSL证书以监听443端口的方法是网络安全和Web服务器管理中的一项重要技能。443端口是HTTP安全套接字层(HTTPS)服务的标准端口,而SSL(安全套接字层)是一种安全协议,用于为互联网通信加密,保障数据传输...
在Windows环境下,配置Nginx以支持HTTPS及在同一端口监听多个网站,即配置多个虚拟主机,是一项常见的网络服务设置任务。Nginx是一个高性能的HTTP和反向代理服务器,以其稳定性、高并发处理能力而受到广泛使用。下面...
一:nginx同一端口监听多个域名和同时监听http,https 分享者:weikle,来自原文地址 1、同一端口监听多个域名 如今公网ip资源越来越珍贵,多域名监听应用非常广泛,就是用一个端口,比如80或者443,监听多个入口...
### 普通用户启动Nginx并使用80端口的方法详解 #### 背景介绍 在Linux系统中,默认情况下,只有root用户才能绑定1024以下的端口号,包括常用的Web服务端口80(HTTP)和443(HTTPS)。然而,在某些场景下,出于安全...
在IT行业中,HTTPS通信是确保网站数据安全传输的重要手段,而Nginx作为一款高性能的HTTP和反向代理服务器,常被用来实现这种安全通信。本文将深入探讨如何通过Nginx配置HTTPS服务器,实现443端口的反向代理,以及与...
在这个例子中,Nginx监听80端口的HTTP请求,并将所有到达的请求转发到本地127.0.0.1的8000端口。`proxy_pass`指令是关键,它定义了Nginx将请求传递的目标地址。 对于多端口映射,可以设置多个`location`块来处理...
- 配置Nginx服务器,设置RTMP模块的相关指令,如应用的监听端口、流存储路径等。 - 启动或重启Nginx服务,使其加载新的配置。 4. **配置RTMP转发** 在Nginx配置文件中,可以通过`rtmp`指令定义服务器,然后使用`...
Nginx 需要监听某个 IP 地址和端口,以便接受来自客户端的请求。 2.2 phases[NGX_HTTP_LOG_PHASE + 1] 的初始化 phases 是 Nginx 中的一个数组,用于存储 HTTP 请求处理过程中的各个阶段。在初始化时,Nginx 会将 ...
例如,使用 ffmpeg 工具可以将本地视频源推送到 Nginx 的 RTMP 监听端口。 6. **运行与监控** 在 `logs` 目录下,Nginx 的日志文件记录了服务器的运行状态和错误信息,这对于诊断问题和优化性能至关重要。`nginx` ...
在上面的配置文件中,我们可以看到有两个server块,一个监听443端口,用于https请求,另一个监听80端口,用于http请求。其中,listen指令用于指定监听的端口号,ssl指令用于启用SSL/TLS加密。 在第一个server块中,...
在这个配置中,`listen`指令指定了Nginx监听的端口,这里是8080。`proxy_pass`则定义了目标服务器的IP和端口,Nginx会将接收到的TCP请求转发到这个地址。 如果你需要实现白名单访问,可以通过Nginx的访问控制功能来...
此配置允许Nginx监听80端口,并在`/live`路径下处理FLV流媒体数据。 ### 总结 集成`nginx-http-flv-module`到64位的`nginx-1.21.4`,不仅可以充分利用64位系统的优势,提高处理能力,还能利用HTTP FLV模块提供高效...
- **conf**: 配置文件目录,其中的`nginx.conf`是主配置文件,包含了Nginx的各种设置,如服务器块、监听端口、日志配置等。 - **logs**: 日志文件目录,Nginx会将访问日志和其他运行信息写入此目录下的文件。 **...
2. **端口分发**:在Nginx配置中,可以设置不同的监听端口,并根据某些规则(如URL路径、主机头或后缀等)将请求分发到不同的后端服务。例如,所有以特定后缀结尾的请求会被转发到特定端口。 3. **负载均衡**:...
这包括设置监听端口、定义服务器块、添加模块指令等。例如,`rtmp_server`和`rtmp_app`指令用于定义RTMP服务器和应用,`hls`指令开启HLS支持,`hls_path`指定HLS片段存储路径。 4. **网络协议理解** 理解HTTP和...
之前在文章windows下nginx的安装、使用及80端口被占用导致nginx不能启动问题的解决中提到nginx默认使用80端口,而Windows下80端口被系统进程占用的解决办法。但有时候不想让nginx使用80端口,如何修改呢? 修改方法 ...
2. 配置监听TCP端口:配置GitLab系统监听的TCP端口,使其可以与系统自带的Nginx进行通信。 3. 重启GitLab服务:重启GitLab服务,以便其使用系统自带的Nginx。 四、配置Nginx 为使Nginx服务正常工作,需要进行以下...