Nginx 端口監(jiān)聽(tīng)(listen指令)
Nginx 端口監(jiān)聽(tīng)(listen指令)
藍(lán)隊(duì)云小課堂:
本節(jié)主要來(lái)介紹 Nginx 中與端口監(jiān)聽(tīng)有關(guān)的配置指令,下表為端口監(jiān)聽(tīng)指令及其相關(guān)說(shuō)明。
名稱 | 端口監(jiān)聽(tīng)指令 |
指令 | listen |
作用域 | server |
默認(rèn)值 | listen*:80 或 *:8000 |
指令說(shuō)明 | 服務(wù)監(jiān)聽(tīng)端口、綁定 IP、監(jiān)聽(tīng)方式的配置 |
Nginx 服務(wù)通過(guò) listen 指令的指令值監(jiān)聽(tīng)網(wǎng)絡(luò)請(qǐng)求,可以是 IP 協(xié)議的形式,也可以是 UNIX 域套接字。如果不設(shè)置 listen 指令,Nginx 在以超級(jí)用戶運(yùn)行時(shí)則監(jiān)聽(tīng) 80 端口,以非超級(jí)用戶運(yùn)行時(shí)則監(jiān)聽(tīng) 8000 端口。
listen 指令的指令值還針對(duì)監(jiān)聽(tīng)方式提供了豐富的參數(shù),如下表所示。
參數(shù) | 默認(rèn)值 | 參數(shù)說(shuō)明 |
address | -- | 若為 IP 協(xié)議,該參數(shù)值為指定綁定監(jiān)聽(tīng)端口的 IP 或主機(jī)名; 若為 UNIX 域套接字,則該參數(shù)值為 sock 文件路徑 |
port | 80 | IP 協(xié)議監(jiān)聽(tīng)的端口 |
bind | address:port | 指定 IP 及端口 |
ipv6only | on | 只接收 IPv6 連接或接收 IPv6 和 IPv4 連接 |
default_server | -- | 當(dāng) http 指令域中包含多個(gè)虛擬主機(jī)時(shí), 該參數(shù)用于指定哪個(gè)虛擬主機(jī)是默認(rèn)服務(wù), 默認(rèn)將第一個(gè)順序的 server 設(shè)為默認(rèn)服務(wù)。 默認(rèn)服務(wù)可以用來(lái)處理沒(méi)有 server_name 匹配成功的請(qǐng)求 |
http2 | -- | HTTP/2 協(xié)議支持 |
spdy | -- | SDPY 協(xié)議支持,與 HTTP/2 協(xié)議不能同時(shí)存在 |
ssl | -- | SSL 支持 |
proxy_protocol | -- | 在指定監(jiān)聽(tīng)端口上啟用 proxy_protocol 協(xié)議支持 |
fastopen | number | HTTP 處于保持連接(keepalive)狀態(tài)時(shí), 允許不經(jīng)過(guò)三次握手的 TCP 連接的隊(duì)列的最大數(shù) |
deferred | -- | 添加該參數(shù)后,在 TCP 三次握手的過(guò)程中, 檢測(cè)到客戶端有數(shù)據(jù)時(shí)才將 TCP 狀態(tài)置為 ESTABLISHED 狀態(tài), 沒(méi)有數(shù)據(jù)則直接丟棄 |
reuseport | -- | 默認(rèn)情況下,所有的工作進(jìn)程會(huì)共享一個(gè) socket 去監(jiān)聽(tīng)同一 IP 和端口的組合。 該參數(shù)啟用后,允許每個(gè)工作進(jìn)程有獨(dú)立的 socket 去監(jiān)聽(tīng)同一 IP 和端口的組合,內(nèi)核會(huì)對(duì)傳人的連接進(jìn)行負(fù)載均衡。適用于 Linux 3.9+,DragonFly BSD 和 FreeBSD 12+ |
so_keepalive | off | 配置是否在監(jiān)聽(tīng)的端口啟用"TCP keepalive"機(jī)制。 當(dāng)設(shè)置為 on 時(shí),默認(rèn)等同于 so_keepalive=30m::10, 表示 30 分鐘無(wú)數(shù)據(jù)傳輸時(shí)發(fā)送探測(cè)包,發(fā)送 10 次, 發(fā)送間隔使用系統(tǒng)內(nèi)核參數(shù) tcp_keepalive_intvl 的設(shè)定值 |
backlog | -1/511 | 當(dāng)阻塞時(shí),設(shè)置掛起連接隊(duì)列的最大長(zhǎng)度, 在 FreeBSD,DragonFly BSD 和 MacOS 操作系統(tǒng)上,默認(rèn)值為 -1, 其他平臺(tái)上值為 511 |
rcvbuf | -- | socket 接收緩沖的大小,默認(rèn)為 8k 字節(jié), 在接收數(shù)據(jù)比較大的場(chǎng)景中可以適當(dāng)調(diào)整 |
sndbuf | -- | socket 發(fā)送緩沖的大小,默認(rèn)為 8k 字節(jié), 在發(fā)送數(shù)據(jù)較大的場(chǎng)景中可以適當(dāng)調(diào)整 |
setfib | number | 為監(jiān)聽(tīng)套接字設(shè)置關(guān)聯(lián)路由表,僅在 FreeBSD 系統(tǒng)上有效 |
accept_filter | filter | 為監(jiān)聽(tīng)套接字設(shè)置過(guò)濾器,僅支持 FreeBSD 和 NetBSD 5.0+ 系統(tǒng) |
配置樣例如下:
http {
server {
listen 127.0.0.1:8000; # 監(jiān)聽(tīng)127.0.0.1的8000端口
listen 127.0.0.1; # 監(jiān)聽(tīng)127.0.0.1的默認(rèn)80端口(root權(quán)限)
listen 8000; # 監(jiān)聽(tīng)本機(jī)所有IP的8000端口
listen *:8000; # 監(jiān)聽(tīng)本機(jī)所有IP的8000端口
listen localhost:8000; # 監(jiān)聽(tīng)locahost的8000端口
listen [::]:8000; # 監(jiān)聽(tīng)I(yíng)Pv6的8000端口
listen [::1]; # 監(jiān)聽(tīng)I(yíng)Pv6的回環(huán)IP的默認(rèn)80端口(root權(quán)限)
listen unix:/var/run/nginx.sock; # 監(jiān)聽(tīng)域套接字文件
listen *:8000 \\ # 監(jiān)聽(tīng)本機(jī)的8000端口
default_server \\ # 當(dāng)前服務(wù)是http指令域的主服務(wù)
fastopen=30 \\ # 開(kāi)啟fastopen功能并限定最大隊(duì)列數(shù)為30
deferred \\ # 拒絕空數(shù)據(jù)連接
reuseport \\ # 工作進(jìn)程共享socket這個(gè)監(jiān)聽(tīng)端口
backlog=1024 \\ # 請(qǐng)求阻塞時(shí)掛起隊(duì)列數(shù)是1024個(gè)
so_keepalive=on; # 當(dāng)socket為保持連接時(shí),開(kāi)啟狀態(tài)檢測(cè)功能
}
}
更多小知識(shí),可聯(lián)系藍(lán)隊(duì)云一起探討。
會(huì)員登錄
賬號(hào)登錄還沒(méi)有賬號(hào)?立即注冊(cè)