全书目录

第十七篇:Nginx 完全指南 —— 城市总闸口宇宙

第四章:server 块 —— 一座城市可以有很多闸门

1 分钟 201 字 第 324 / 962 个阅读单元

server 块就是虚拟主机,也是不同域名、不同端口对应的不同闸门。

nginx
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;
        }
    }
}

这表示:

text
example.com        -> 主站闸门
www.example.com    -> 主站闸门
admin.example.com  -> 后台闸门

Nginx 处理一个请求时,先看:

  1. 这个请求打到哪个 listen 端口
  2. 这个请求的 Host 是什么
  3. 该交给哪个 server

如果都没匹配上,会落到该端口的默认 server

一个很常见的生产写法是专门准备一个“兜底闸门”:

nginx
server {
    listen 80 default_server;
    server_name _;
    return 444;
}

它的意思是:不认识的域名,不给进城,直接断开。

这很像总闸口门口的规则:

text
登记过的车牌 -> 按车道入城
没登记的车牌 -> 拒绝通行