一个请求进入nginx之后,处理请求之前,要先监听端口,使得nginx和客户端建立一个tcp链接。监听端口的指令为listen指令,它是放在server模块下的,比如:
http {
server {
listen 80;
......
}
server {
listen 443;
.....
}
}
一个http中可以有多个server模块,用于监听处理不同端口。listen指令只能出现在server模块下。
一、listen指令的值
listen指令的值可以是三种:
-
IP地址或者ip:port。
-
port
-
unix:path
1、IP地址或者ip:port
当listen的值为ip地址时,那么只监听该ip地址的请求,包括所有端口。当listen的值为ip:port时,只监听ip:port对应的请求。
2、port
当listen的值为port时,会只监听主机对应的port的请求。
3、unix:path
只能用于本地通信。使用上面两种值进行通讯时,是要走操作系统内核的完整的网络栈的,二unix:path不需要,所以unix:path的性能回更好。
二、listen指令的示例
1、listen unix:/var/run/nginx.sock;
unix:/var/run/nginx.sock不是一个普通的文件,而是一个unix sock,用于通讯的,使用ls -l查看
2、listen 127.0.0.1:8000;
3、listen 127.0.0.1;
默认使用80端口。
4、listen 8000;
5、listen *8000;
效果同第四项一样。
6、listen localhost:8000 bind;
老的linux配置默认使用8000端口,如果要绑定其他的端口,就需要使用bind进行显示绑定,现在操作系统不需要了。
7、listen [::]8000 ipv6only=on;
8、listen [::1];
监听ipv6的默认回环ip的默认80端口。