本文概述
- server_name指令
- 听指令
server {listen*:80 default_server;
server_name srcmini.co;
return 200 "Hello from srcmini.co";
}server {listen*:80;
server_name nikita.co;
return 200 "Hello from nikita.co";
}server {listen*:81;
server_name deep.co;
return 200 "Hello from deep.co";
}
上面的示例将使nginx了解如何处理传入的请求。首先, nginx将检查listen指令以测试哪个虚拟服务器在给定的IP:端口组合上进行监听。然后, 对照Host标头测试server_name指令中的值, 该标头存储服务器的域名。
Nginx按以下顺序选择虚拟服务器:
- 服务器在IP:端口上列出, 并带有匹配的指令即server_name。
- 服务器在IP:端口上列出, 带有default_server标志;
- 服务器在IP:端口上列出, 第一个已定义。
- 如果没有匹配项, 请拒绝连接。
Request to nikita.co:80=>
"Hello from nikita.co"Request to www.nikita.co:80 =>
"Hello from srcmini.co"Request to deep.co:80=>
"Hello from srcmini.co"Request to deep.co:81=>
"Hello from nikita.co"Request to nikita.co:81=>
"Hello from deep.co"
server_name指令server_name指令用于接受多个值。它也用于处理通配符匹配和正则表达式。
server_name srcmini.co www.srcmini.co;
# exact matchserver_name *.srcmini.co;
# wildcard matchingserver_name srcmini.*;
# wildcard matchingserver_name~^[0-9]*\.srcmini\.co$;
# regexp matching
【NGINX处理请求】如果有任何歧义, 则nginx使用以下顺序:
- 确切名称;
- 最长的通配符名称以星号开头, 例如” * examples.org” ,
- 最长的通配符名称以星号结尾, 例如” mail。*” ;
- 首先匹配正则表达式。
注意: –
server_name .srcmini.co;
它是以下内容的缩写:
server_namesrcmini.cowww.srcmini.co*.srcmini.co;
仅有一个区别:.srcmini.co存储在第二个表中, 这意味着它比显式声明要慢一些。
听指令在大多数情况下, 我们将看到listen指令接受IP:端口值。
listen 127.0.0.1:80;
listen 127.0.0.1;
# port :80 is used by defaultlisten *:81;
listen 81;
# all ips are used by defaultlisten [::]:80;
# IPv6 addresseslisten [::1];
# IPv6 addresses
但是, 也可以指定UNIX域的套接字:
listen unix:/var/run/nginx.sock;
甚至我们都可以使用主机名:
listen localhost:80;
listen netguru.co:80;
如果该指令不存在, 则使用*:80。
推荐阅读
- NGINX从缓存中清除内容
- NGINX负载均衡
- NGINX最低配置详解
- 什么是NGINX()
- HTTP负载均衡配置详解
- NGINX运行状况检查详解
- NGINX动态模块
- Nginx指令与上下文
- NGINX所有指令