在LNMP环境里给多个域名配虚拟主机,核心就三件事:DNS把域名指到同一台服务器IP,Nginx按server_name区分站点,目录权限和PHP-FPM套接字配对正确。 下面按实际部署顺序拆开讲,命令能直接复制,路径以常见LNMP一键包和宝塔面板为例。
LNMP环境下多个域名怎么配置虚拟主机:从解析到上线
先做DNS解析:A记录、CNAME和泛解析怎么选
你如果只给www.example.com加了记录,用户访问裸域example.com就会落到默认站点,多域名部署第一步不是改Nginx,而是把解析做全。
- 主域名用A记录指向服务器公网IP,主机记录填。
www用A记录或CNAME指向主域名,主机记录填www。- 子站如
blog.example.com、shop.example.com分别加A记录。 - 泛解析
.example.com适合批量二级站,但要注意证书和备案边界。 - TTL先设短一些,常见用600秒,方便调整后快速生效。
验证别只看浏览器,直接用命令:
dig +short example.com dig +short www.example.com ping -c 3 example.com
返回IP与服务器公网IP一致,再进Nginx,若使用云服务器,安全组要放行80和443,系统防火墙也要放行。
| 解析方式 | 适用场景 | 注意点 |
|---|---|---|
| A记录 | 主域名、独立子站 | 直接绑IP,改服务器要改解析 |
| CNAME | www指向主域名 |
根域名通常不建议用CNAME |
| 泛解析 | 批量二级站 | 证书、备案、日志要规划 |
手动配置Nginx虚拟主机(LNMP一键包)
LNMP一键包常见配置目录是/usr/local/nginx/conf/vhost/,先确认主配置里有没有包含:
grep -n "vhost" /usr/local/nginx/conf/nginx.conf
没有就加上include vhost/.conf;,放在http {}块内。
建站点目录与权限
mkdir -p /home/www/example.com mkdir -p /home/www/blog.example.com chown -R www:www /home/www/example.com /home/www/blog.example.com chmod -R 755 /home/www/example.com /home/www/blog.example.com
Ubuntu系PHP-FPM用户可能是www-data,按实际用户调整,权限不对,PHP页面容易500或无法写入缓存。
写server块与PHP-FPM
新建/usr/local/nginx/conf/vhost/example.com.conf:
server {
listen 80;
server_name example.com www.example.com;
root /home/www/example.com;
index index.html index.php;
access_log /home/wwwlogs/example.com.log;
error_log /home/wwwlogs/example.com.error.log;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include enable-php.conf;
# 或 fastcgi_pass unix:/tmp/php-cgi.sock;
}
}
第二个站点复制一份,改server_name、root和日志名。server_name支持精确域名、通配符和正则,据Nginx官方文档,匹配顺序会直接影响请求落到哪个站点,裸域和www要写在同一行,避免漏配。
自检与重载
nginx -t systemctl reload nginx # 老环境可用 /etc/init.d/nginx reload curl -I -H "Host: example.com" http://127.0.0.1 curl -I -H "Host: blog.example.com" http://127.0.0.1
nginx -t通过再重载,返回200或301说明Nginx层通了,再查PHP和数据库。
宝塔面板和手动配置LNMP多站点哪个好
宝塔适合快速上线,手动适合掌控细节,两者不是非此即彼,关键看你的运维习惯。
| 对比项 | 手动配置LNMP | 宝塔面板 |
|---|---|---|
| 操作入口 | 编辑vhost配置 |
面板添加站点 |
| 适合人群 | 熟悉命令、要精细控制 | 新手、批量建站 |
| 排错方式 | 看Nginx日志和nginx -t |
面板日志+配置文件 |
| 成本 | 软件免费,时间成本高 | 基础功能免费,专业版付费 |
| 可控性 | 高 | 中高,依赖面板规范 |
宝塔的站点配置通常在/www/server/panel/vhost/nginx/,添加站点时会自动建目录、绑域名,手动配置则要自己管目录、日志和PHP套接字,选择时别只看“快”,还要看后续迁移和排错成本。
一台服务器部署多个网站需要注意什么
多站点不是多写几个server块就完事,行业共识认为,多站点共用一台服务器时,日志、权限和资源隔离比单纯加server块更重要。
- 每个站点独立
root,不要互相嵌套。 - 日志按域名拆分,方便定位。
- PHP-FPM可共用池,也可按站点分池,分池更利于隔离资源。
- 数据库账号按站点分开,避免误删。
- 备份策略要覆盖目录、数据库和Nginx配置。
- 带宽和内存要留余量,尤其跑WordPress、商城类站点。
- HTTPS证书按域名签发,泛域名证书覆盖二级站。
北京地区LNMP多域名备案怎么处理
据工信部公开信息,境内服务器绑定域名通常需要完成ICP备案,北京地区用户办理备案时,通常由云服务商代提交,核心看服务器所在地、主体资质和网站内容,机房是否在北京不是唯一条件,境外服务器一般不走境内备案流程,但访问速度和合规要求要单独评估,多域名绑定同一主体时,按接入商要求补充域名列表。
自己配置LNMP多域名要花钱吗
LNMP软件本身开源免费,主要成本在服务器、域名、证书和运维时间,SSL证书可用免费方案,面板基础版通常够用,专业版按年付费,近年来,云服务器和面板工具降低了多站点门槛,但排错仍要懂基础命令,花钱买的是效率和托管服务,不是server_name本身。
多域名虚拟主机的常见坑与排查表
业内专家指出,多站点排错先看server_name匹配顺序,再看PHP-FPM套接字,很多“串站”不是Nginx坏了,而是请求落到了默认server。
| 现象 | 优先检查 | 命令或动作 |
|---|---|---|
| 访问域名进默认站 | server_name是否写全 |
nginx -T \| grep server_name |
| 解析生效但打不开 | 安全组、防火墙 | ss -lntp \| grep :80 |
| PHP页面502 | PHP-FPM是否运行 | systemctl status php-fpm |
| 页面404 | root和try_files |
查站点目录和日志 |
| HTTPS报错 | 证书域名是否匹配 | 查ssl_certificate配置 |
域名解析生效但访问默认站点
先确认裸域和www都在server_name里,再查是否有默认server抢匹配。nginx -T能展开完整配置,比只看单个文件可靠。
PHP页面502或404
502多半是PHP-FPM没起或套接字路径不对,404先看root是否指错,再看index和伪静态,改完统一执行nginx -t和重载。
HTTPS证书只给一个域名配了
多域名要么每个站点单独证书,要么用泛域名证书,证书与域名不匹配,浏览器会直接拦截,443端口和防火墙也要同步放行。
把解析、server_name、目录权限和PHP-FPM四件事对齐,多域名虚拟主机就能稳定跑起来,多站点运维的重点不是配置数量,而是隔离和可排错。
LNMP多域名虚拟主机配置Q&A
LNMP环境下多个域名怎么配置虚拟主机需要改主配置吗?
通常不用大改主配置,只要nginx.conf里已include vhost/.conf;,新增站点就新建独立配置文件,改完执行nginx -t再重载,没有include就先补上。
多个域名共用一个IP会不会互相串站?
同一IP可以绑多个域名,Nginx靠server_name区分,串站多半是域名没写进server_name,或存在默认站点兜底,把裸域、www和子域写全,再用curl -H "Host: 域名"验证。
一台服务器最多能配置多少个虚拟主机?
数量主要受内存、CPU、带宽和文件句柄限制,Nginx本身没有很低的硬上限,静态站可以密度高一些,动态站要按PHP-FPM进程和数据库连接数估算,实际数量由服务器资源、带宽和运维规范决定。