Nginx服务配置多站点
约 533 字大约 2 分钟
2026-08-29
在一台 Linux 服务器上托管多个网站,是 Nginx 最常见的用法:Nginx 通过监听的域名(server_name)区分请求属于哪个站点,各站点相互独立。本文基于部署LNMP环境的配置方式,演示托管两个站点。
前提
- Nginx 已安装并运行(不含也行,仅静态网站只需 Nginx)。
- 两个域名都已解析到实例公网 IP;境内节点需完成备案并通过域名白名单,安全组放行 80/443。
配置步骤
创建站点目录与测试页
sudo mkdir -p /var/www/sitea /var/www/siteb echo "<h1>Site A</h1>" | sudo tee /var/www/sitea/index.html echo "<h1>Site B</h1>" | sudo tee /var/www/siteb/index.html为站点 A 创建配置
/etc/nginx/conf.d/sitea.confserver { listen 80; server_name www.a.com a.com; # 站点 A 的域名 root /var/www/sitea; index index.html index.php; location / { try_files $uri $uri/ /index.php?$query_string; } }为站点 B 创建配置
/etc/nginx/conf.d/siteb.conf把上文中
server_name改为www.b.com b.com、root改为/var/www/siteb,其余一致。检查并重载 Nginx
sudo nginx -t && sudo systemctl reload nginx验证
本地修改 hosts(或域名已解析)后,浏览器分别访问两个域名,应看到各自的测试页。
关于 PHP 站点
站点需要运行 PHP 的,在对应 server 块中按部署LNMP环境第四步补上 location ~ \.php$ 段落即可,各站点共用同一个 PHP-FPM。
常见问题
访问两个域名显示的都是同一个站点?
server_name 未正确填写该域名,或漏写域名主/带 www 两种形式。Nginx 按 Host 头匹配 server_name,匹配不到时回落到第一个 server 块(或标了 default_server 的块),造成"都指向同一个站"的现象。
想用一个域名加端口再跑一个站点?
可以:第二个站点的 listen 改为 8080;,访问 http://域名:8080/,同时安全组放行 8080。
配置检查通过但重载后不生效?
systemctl reload nginx 只在 nginx -t 无错时执行;确认浏览器无缓存(Ctrl+F5 强刷),并确认 conf 文件确实放在 nginx 加载的目录(nginx -T | grep sitea 可验证是否被加载)。
