主题
server 匹配
server 块用于定义虚拟主机。一次请求进入 Nginx 后,先根据 listen 选择端口,再根据 Host 请求头匹配 server_name。
基本配置
nginx
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/example.com;
index index.html;
}
}默认站点
default_server 用于兜底处理未匹配到域名的请求:
nginx
server {
listen 80 default_server;
server_name _;
return 444;
}如果没有显式配置 default_server,Nginx 会使用同一 listen 地址下第一个 server 作为默认站点。
server_name 匹配
常见写法:
nginx
server_name example.com www.example.com;
server_name *.example.com;
server_name example.*;
server_name ~^www\d+\.example\.com$;匹配优先级:
- 精确名称,例如
example.com。 - 最长的前缀通配符,例如
*.example.com。 - 最长的后缀通配符,例如
example.*。 - 按配置顺序匹配正则名称,例如
~^www\d+\.example\.com$。 - 默认站点。
多域名跳转
将裸域跳转到 www:
nginx
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
}常见问题
配置了域名但不生效
检查点:
- DNS 是否解析到当前服务器。
server_name是否包含请求的Host。- 是否有其他
default_server或更早的同端口配置抢先匹配。 - 修改后是否执行
nginx -t和 reload。
使用 IP 访问命中了业务站点
给同端口配置一个默认站点:
nginx
server {
listen 80 default_server;
server_name _;
return 444;
}