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 分享者:weikle,来自原文地址 1、同一端口监听多个域名 如今公网ip资源越来越珍贵,多域名监听应用非常广泛,就是用一个端口,比如80或者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...
(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.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; ...
HTTP监听 8080 端口, * :8080/stat 查看stream状态 * :8080/index.html 为一个直播播放与直播发布测试器 * :8080/vod.html 为一个支持RTMP和HLS点播的测试器 # 注意 不支持exec # 直播测试工具 内置了一个方便...
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-...
HTTP监听 8080 端口, * :8080/stat 查看stream状态 * :8080/index.html 为一个直播播放与直播发布测试器 * :8080/vod.html 为一个支持RTMP和HLS点播的测试器 # 注意 不支持exec # 直播测试工具 内置了一个方便...
1. 服务端口和服务器块:配置Nginx监听的端口和定义服务器块。服务器块可以包含多个指令,用于配置虚拟主机、域名解析等。 2. HTTP协议配置:在HTTP块中配置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/ 直接跳转到...
-- port="18081" tomcat监听端口,随意设置,别太小 --> <Connector port="18081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 第三处端口修改: Engine元素增加...
nginx把监听的端口的请求平均转到布署了网站的服务器。 一、windows上安装nginx 1.官网下载windows版的nginx http://nginx.org/en/docs/windows.html 目前最新版本为1.13.2 2.下载解压后 3.因为我电脑80端口已经...
nginx配置文件的详细介绍。...#当需要对同一端口监听多个域名时,使用如下配置,端口相同域名不同,server_name也可以使用正则进行配置 #但要注意server过多需要手动扩大server_names_hash_bucket_size缓存区大小
Nginx代理 安装Nginx用作前端代理。 依存关系 需要nginx角色(自动包含)。 角色变量:主要的Nginx配置 nginx_proxy_worker_... nginx_proxy_listen_http :监听此端口,默认为80 。 nginx_proxy_cachebuster_port
我擦,我的https已经监听了443端口,webSocket再去监听443,肯定不行啊。要想办法解决,老大把这个问题交给我了,我愉快(手动懵逼)的接收了这个任务。想到了两种办法解决。一种解决办法是把webSocket部署到另一台...
- 修正Nginx在Windows2003无法监听端口的问题 2011年11月5日 - 更新Nginx版本到1.0.9 - 将Nginx子进程数设置为2,单进程连接数提高到3072 - 允许设置多个错误处理页面 - 允许设置多个PHP处理配置 2011年10月8日 - ...
搭建nginx网站服务器 主配置文件:# vim /etc/nginx/nginx.conf* ...监听端口:80 默认目录:/usr/share/nginx/html 日志文件:error_log /var/log/nginx/error.log; error_log /var/log/nginx/acce
第一方法是在服务器端...Nginx监听80和443端口,把来自域名的请求,通过Nginx的反向代理转发给frps监听的端口(比如7000),再由frps在转发给frpc处理http响应。在Nginx里配置上https证书,由Nginx实现ssl的加密解密。