server 块就是虚拟主机,也是不同域名、不同端口对应的不同闸门。
http {
server {
listen 80;
server_name example.com www.example.com;
location / {
root /srv/www/main-site;
}
}
server {
listen 80;
server_name admin.example.com;
location / {
root /srv/www/admin-site;
}
}
}这表示:
example.com -> 主站闸门
www.example.com -> 主站闸门
admin.example.com -> 后台闸门Nginx 处理一个请求时,先看:
- 这个请求打到哪个
listen端口 - 这个请求的
Host是什么 - 该交给哪个
server
如果都没匹配上,会落到该端口的默认 server。
一个很常见的生产写法是专门准备一个“兜底闸门”:
server {
listen 80 default_server;
server_name _;
return 444;
}它的意思是:不认识的域名,不给进城,直接断开。
这很像总闸口门口的规则:
登记过的车牌 -> 按车道入城
没登记的车牌 -> 拒绝通行