亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > Nginx > 正文

nginx中的listen指令實例解析

2024-08-30 12:24:39
字體:
來源:轉載
供稿:網友

劇情回顧

上一篇文章我們分析了location指令的解析過程,簡單的回顧一下這個內容:每個location對應一個ngx_http_core_loc_conf_t結構體,所有的location通過一個雙向隊列連接在一起。數據結構比較復雜。

listen指令

nginx作為一個高性能的HTTP服務器,網絡的處理是其核心,了解網絡的初始化有助于加深對nginx網絡處理的了解。與網絡有關的配置命令主要有兩個:listen和sever_name。listen命令設置nginx監聽地址,對于IP協議,這個地址就是address和port,對于UNIX域套接字協議,這個地址就是path,一條listen指令只能指定一個address或者port,address也可以是主機名

從這一篇文章開始,我們分析listen指令的解析過程,listen指令的配置如下:從nginx.org的手冊中我們可以獲取listen的使用方法:

listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [ssl] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

一個listen指令攜帶的參數是很復雜的。不過,我們一般很少關注那些不太常用的參數,以下是一些常用的配置方式:

listen 127.0.0.1:8000;listen 127.0.0.1 不加端口,默認監聽80端口;listen 8000listen *:8000listen localhost:8000

解析listen指令中的uri和端口

從上面的內容知道,listen有多種用法,我們在解析的時候需要獲取到listen指令的端口號和uri部分,nginx提供了ngx_parse_url()方法來解析uri和port,該函數在解析listen指令的時候會被調用。

ngx_int_tngx_parse_url(ngx_pool_t *pool, ngx_url_t *u){ u_char *p; size_t len; p = u->url.data; len = u->url.len; // 這里是解析unix domain的協議 if (len >= 5 && ngx_strncasecmp(p, (u_char *) "unix:", 5) == 0) { return ngx_parse_unix_domain_url(pool, u); } // 解析IPV6協議 if (len && p[0] == '[') { return ngx_parse_inet6_url(pool, u); } // 解析IPV4協議 return ngx_parse_inet_url(pool, u);}

我們使用的是IPV4協議,這里分析ngx_parse_inet_url()函數

// u.url = "80";// u.listen = 1;// u.default_port = 80;static ngx_int_tngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u){ u_char *p, *host, *port, *last, *uri, *args; size_t len; ngx_int_t n; struct sockaddr_in *sin;#if (NGX_HAVE_INET6) struct sockaddr_in6 *sin6;#endif u->socklen = sizeof(struct sockaddr_in); sin = (struct sockaddr_in *) &u->sockaddr; sin->sin_family = AF_INET;// IPV4類型 u->family = AF_INET;  host = u->url.data; // "80" last = host + u->url.len; // host的最后字符的位置 port = ngx_strlchr(host, last, ':'); // 找到port, 這里為 NULL uri = ngx_strlchr(host, last, '/'); // 找到uri,這里為 NULL args = ngx_strlchr(host, last, '?'); // 找到參數args,這里為 NULL if (args) { if (uri == NULL || args < uri) { uri = args; } } if (uri) { if (u->listen || !u->uri_part) { u->err = "invalid host"; return NGX_ERROR; } u->uri.len = last - uri; u->uri.data = uri; last = uri; if (uri < port) { port = NULL; } } if (port) { port++; len = last - port; n = ngx_atoi(port, len); if (n < 1 || n > 65535) { u->err = "invalid port"; return NGX_ERROR; } u->port = (in_port_t) n; sin->sin_port = htons((in_port_t) n); u->port_text.len = len; u->port_text.data = port; last = port - 1; } else { if (uri == NULL) { if (u->listen) { /* test value as port only */ n = ngx_atoi(host, last - host); if (n != NGX_ERROR) { if (n < 1 || n > 65535) { u->err = "invalid port"; return NGX_ERROR; } u->port = (in_port_t) n; sin->sin_port = htons((in_port_t) n); u->port_text.len = last - host; u->port_text.data = host; u->wildcard = 1; return NGX_OK; } } } u->no_port = 1; u->port = u->default_port; sin->sin_port = htons(u->default_port); } len = last - host; if (len == 0) { u->err = "no host"; return NGX_ERROR; } u->host.len = len; u->host.data = host; if (u->listen && len == 1 && *host == '*') { sin->sin_addr.s_addr = INADDR_ANY; u->wildcard = 1; return NGX_OK; } sin->sin_addr.s_addr = ngx_inet_addr(host, len); if (sin->sin_addr.s_addr != INADDR_NONE) { if (sin->sin_addr.s_addr == INADDR_ANY) { u->wildcard = 1; } u->naddrs = 1; u->addrs = ngx_pcalloc(pool, sizeof(ngx_addr_t)); if (u->addrs == NULL) { return NGX_ERROR; } sin = ngx_pcalloc(pool, sizeof(struct sockaddr_in)); if (sin == NULL) { return NGX_ERROR; } ngx_memcpy(sin, &u->sockaddr, sizeof(struct sockaddr_in)); u->addrs[0].sockaddr = (struct sockaddr *) sin; u->addrs[0].socklen = sizeof(struct sockaddr_in); p = ngx_pnalloc(pool, u->host.len + sizeof(":65535") - 1); if (p == NULL) { return NGX_ERROR; } u->addrs[0].name.len = ngx_sprintf(p, "%V:%d",  &u->host, u->port) - p; u->addrs[0].name.data = p; return NGX_OK; } if (u->no_resolve) { return NGX_OK; } if (ngx_inet_resolve_host(pool, u) != NGX_OK) { return NGX_ERROR; } u->family = u->addrs[0].sockaddr->sa_family; u->socklen = u->addrs[0].socklen; ngx_memcpy(&u->sockaddr, u->addrs[0].sockaddr, u->addrs[0].socklen); switch (u->family) {#if (NGX_HAVE_INET6) case AF_INET6: sin6 = (struct sockaddr_in6 *) &u->sockaddr; if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) { u->wildcard = 1; } break;#endif default: /* AF_INET */ sin = (struct sockaddr_in *) &u->sockaddr; if (sin->sin_addr.s_addr == INADDR_ANY) { u->wildcard = 1; } break; } return NGX_OK;}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品免费电影| 日韩精品一区二区三区第95| 色噜噜狠狠狠综合曰曰曰88av| 欧美一区二区三区精品电影| 中文字幕在线亚洲| 九九久久久久久久久激情| 成人写真福利网| 亚洲精品日韩丝袜精品| 欧美黄色片免费观看| 国产精品视频精品视频| 免费91在线视频| 亚洲欧美三级伦理| 日韩精品在线免费观看视频| 91免费精品视频| 欧美在线欧美在线| 欧美大片免费观看| 精品视频在线播放色网色视频| 久久夜精品香蕉| 国内精品免费午夜毛片| 亚洲精品美女免费| 欧美日韩日本国产| 亚洲淫片在线视频| 中文字幕精品久久久久| 亚洲精品中文字幕女同| 日本中文字幕成人| 91视频九色网站| 成人久久久久久久| 成人网在线观看| 国产精品久久久久久超碰| 欧美激情一区二区三区在线视频观看| 欧美激情免费看| 日韩免费在线看| 国产精品专区h在线观看| 国内精品小视频在线观看| 亚洲最大av在线| 日韩美女免费观看| 亚洲第一福利网| 久久躁狠狠躁夜夜爽| 一二美女精品欧洲| 亚洲国产天堂久久综合网| 国产女精品视频网站免费| 亚洲跨种族黑人xxx| 久久亚洲成人精品| 欧美成人免费观看| 69久久夜色精品国产69乱青草| 亚洲精品一区av在线播放| 久久亚洲精品国产亚洲老地址| 日本欧美精品在线| 精品国内产的精品视频在线观看| 91九色视频在线| 91高潮在线观看| 国产精品激情自拍| 自拍偷拍亚洲欧美| 欧美一级在线亚洲天堂| 欧美成人激情视频免费观看| 久久久在线免费观看| 欧美激情成人在线视频| 日本中文字幕久久看| 性亚洲最疯狂xxxx高清| 91国自产精品中文字幕亚洲| 亚洲第一偷拍网| 亚洲欧美制服另类日韩| 97精品欧美一区二区三区| 欧美成人sm免费视频| 中文字幕av一区二区三区谷原希美| 在线亚洲男人天堂| 国产精品一区二区三区毛片淫片| 久久久国产精品视频| 欧美激情videoshd| 91嫩草在线视频| 亚洲欧美三级在线| 欧美日韩精品在线观看| 国内精品中文字幕| 国产成人福利视频| 国产精品一久久香蕉国产线看观看| 97久久久久久| 国产在线不卡精品| 国产成人精彩在线视频九色| 国产成人avxxxxx在线看| 一本色道久久88精品综合| 亚洲精品98久久久久久中文字幕| 精品久久久久久久久中文字幕| 久久精品国产成人精品| 国产日韩综合一区二区性色av| 亚洲成人亚洲激情| 欧美成人免费在线观看| 日韩av一区二区在线观看| 亚洲色图美腿丝袜| 国产精品午夜一区二区欲梦| 国产精品久久一区主播| 欧美性猛交xxxx免费看漫画| 日韩精品视频中文在线观看| 欧美国产精品人人做人人爱| 91麻豆国产精品| 亚洲精品av在线播放| 69av在线视频| 国产精品福利在线观看网址| 亚洲电影免费在线观看| 日韩av免费网站| 欧美高清理论片| 亚洲男人7777| 精品成人乱色一区二区| 欧美精品做受xxx性少妇| 欧美麻豆久久久久久中文| 国产精品久久久久久久电影| 国产精品高清在线观看| 日韩在线一区二区三区免费视频| 久久电影一区二区| 免费不卡欧美自拍视频| 久久久中文字幕| zzjj国产精品一区二区| 97超视频免费观看| 日韩在线观看电影| 亚洲高清在线观看| 亚洲精品视频久久| 91精品国产91久久久久| 综合欧美国产视频二区| 久久久这里只有精品视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产精品爽爽爽| 欧美激情一级欧美精品| 91精品免费久久久久久久久| 在线观看欧美成人| 狠狠色狠狠色综合日日小说| 日韩欧美第一页| 欧美精品少妇videofree| 午夜精品福利电影| 色爱av美腿丝袜综合粉嫩av| 欧美精品国产精品日韩精品| 国产精品99久久久久久人| 国产福利精品av综合导导航| 亚洲天堂视频在线观看| 欧美精品成人在线| 久久久久久久久久久av| 国产一区二区三区高清在线观看| 亚洲美女中文字幕| 久久久久久国产精品| 亚洲第一av在线| 久久人91精品久久久久久不卡| 成人a在线观看| 中文字幕亚洲二区| 国产成人在线精品| 日韩h在线观看| 日韩在线视频线视频免费网站| 91国产视频在线播放| 欧美性生交xxxxx久久久| 国产99视频在线观看| 欧美一级免费视频| 日韩在线免费视频观看| 色视频www在线播放国产成人| 欧美亚洲第一页| 欧美与黑人午夜性猛交久久久| 美女久久久久久久久久久| 久久久999精品免费| 亚洲精品动漫100p| 91久久精品在线| 久久激情五月丁香伊人| 精品人伦一区二区三区蜜桃免费| 在线播放国产精品| 91超碰中文字幕久久精品| 久久国产视频网站| 亚洲人成网站色ww在线| 精品国产欧美一区二区三区成人| 欧美日韩精品中文字幕|