Nginx 绑定域名
适用人群:已经把域名解析到服务器、需要在Nginx里配置该域名对应站点的开发者/运维
核心概念
server块与server_name的作用
Nginx用server块描述一个虚拟主机,server_name用来匹配请求头里的Host,决定一个请求该由哪个server块处理。同一台服务器可以有多个server块,分别绑定不同域名,实现"一台服务器多个站点"。
server_name支持精确匹配(example.com)、多域名(example.com www.example.com)、通配符(*.example.com)和简单正则,Nginx按匹配优先级(精确 > 前缀通配 > 后缀通配 > 正则)选择最合适的server块。
操作步骤
步骤 1定位或新建配置文件
通常在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/ 下新建一个以站点命名的.conf文件。
步骤 2编写server块并设置server_name
在server块中写入 server_name example.com www.example.com;,声明该站点对应的域名。
步骤 3配置监听端口与内容来源
设置listen 80;(后续HTTPS再加443),并配置root指向静态文件目录,或proxy_pass转发到后端应用端口。
步骤 4检测配置语法
执行 nginx -t,确认没有语法错误再进行下一步,避免reload时因语法错误导致服务中断。
步骤 5重载配置生效
执行 systemctl reload nginx(或 nginx -s reload),不中断已有连接的情况下应用新配置。
步骤 6验证绑定是否生效
用 curl -H "Host: example.com" http://服务器IP 或直接用域名访问,确认返回了预期站点内容。
实际示例
# /etc/nginx/conf.d/example.conf
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
如果是反向代理到Node/Java等后端应用:
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# 检测语法并重载
nginx -t && systemctl reload nginx
常见错误
- ⚠️改完配置文件忘记执行nginx -t和reload,改动一直没生效
- ⚠️多个server块使用了相同的server_name,造成匹配冲突,只有一个能生效
- ⚠️只配置了80端口,后续加HTTPS时忘记server_name和证书里的域名要保持一致
- ⚠️server_name和实际访问域名大小写/拼写不一致,导致Nginx走到default server返回错误内容
对应工具
常见问题
一个server块能绑定多个域名吗?
修改Nginx配置后是要重启还是reload?
泛域名(*.example.com)怎么配置?
HTTP和HTTPS需要分别写server块吗?
相关教程
官方资料来源