服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-11-01 简米科技 4,130 字 10 分钟阅读

lnmp子域名绑定详细步骤是什么?如何正确配置生效?,lnmp子域名绑定教程

导读LNMP子域名绑定并不复杂:在DNS里加一条A记录指向服务器IP,再到Nginx的vhost配置中把server_name写成子域名、root指向独立站点目录,执行nginx -t检查语法后重载Nginx,最后确认PHP-FPM与目录权限即可生效,真正容易翻车的不是“绑定”这一步,而是解析没生效、server……

LNMP子域名绑定并不复杂:在DNS里加一条A记录指向服务器IP,再到Nginx的vhost配置中把server_name写成子域名、root指向独立站点目录,执行nginx -t检查语法后重载Nginx,最后确认PHP-FPM与目录权限即可生效。真正容易翻车的不是“绑定”这一步,而是解析没生效、server_name冲突、目录权限不对这三类细节,下面按实际操作顺序拆开讲,命令和路径都能直接对照使用。

LNMP子域名绑定前先理清三层逻辑

很多人一上来就改Nginx配置,改完访问还是主站内容,于是怀疑人生,其实子域名能否访问,取决于三个环节依次打通,缺一层都不行。

域名解析层:A记录决定请求去哪儿

子域名本质是DNS层面的独立主机名,比如shop.example.com,你需要在域名服务商后台添加一条A记录:

  • 主机记录填shop(只填前缀,不要填完整域名)
  • 记录类型选A
  • 记录值填服务器公网IP
  • TTL用默认值即可,一般600秒左右

如果要走CDN,就改成CNAME记录指向CDN提供的域名,解析生效时间通常在几分钟到几十分钟,行业内普遍认为全球递归DNS完全刷新可能要更久。

Nginx的server_name层:匹配到哪个站点

Nginx收到请求后,靠HTTP头里的Host字段去比对各个server块的server_name,匹配不上时,请求会落到default_server,于是你看到的是默认站点或主站内容,这就是“配置了却打不开”的最常见原因。

站点根目录与PHP-FPM层:代码从哪儿读、由谁执行

root决定静态文件和入口脚本的位置,PHP-FPM的fastcgi_pass决定PHP由哪个进程池处理,LNMP一键安装包默认多个站点共用一个PHP-FPM池,宝塔则是每个站点独立池,共用池时要注意open_basedir是否限制了新目录,独立池时注意池配置文件是否为新站点生成。

LNMP子域名绑定详细步骤:命令行手工配置版

适合用LNMP一键安装包、习惯SSH操作的环境,下面以shop.example.com绑定到/home/wwwroot/shop.example.com为例。

第一步:先把DNS记录加好

在域名解析后台添加A记录后,用命令验证是否生效:

dig shop.example.com +short
# 或
nslookup shop.example.com

返回你的服务器IP才算解析到位,没返回就继续等,别急着改Nginx。

第二步:创建独立站点目录并授权

mkdir -p /home/wwwroot/shop.example.com
chown -R www:www /home/wwwroot/shop.example.com
chmod -R 755 /home/wwwroot/shop.example.com

LNMP环境下Nginx和PHP-FPM的运行用户通常是www,属主不对会直接导致403。

第三步:复制主站vhost并改写关键字段

cp /usr/local/nginx/conf/vhost/example.com.conf \
   /usr/local/nginx/conf/vhost/shop.example.com.conf

打开新文件,重点改这几处:

  • server_name改成shop.example.com
  • root改成/home/wwwroot/shop.example.com
  • access_log和error_log路径换成子域名专属,便于排查
  • 伪静态规则文件路径确认存在,比如include rewrite/wordpress.conf;
  • PHP部分确认fastcgi_pass unix:/tmp/php-cgi.sock;与当前PHP版本一致

一个最小可用的server块结构如下:

server {
    listen 80;
    server_name shop.example.com;
    root /home/wwwroot/shop.example.com;
    index index.html index.php;
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/tmp/php-cgi.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

第四步:语法检查后重载,不要直接restart

/usr/local/nginx/sbin/nginx -t

看到syntax is ok和test is successful再执行:

/usr/local/nginx/sbin/nginx -s reload
# 或
lnmp nginx reload

reload是平滑重载,不中断现有连接;restart会短暂断流,线上环境优先用前者。

第五步:本地验证响应

curl -I http://shop.example.com

返回200或301/302说明Nginx层已通,如果返回的是主站内容,回到server_name排查;返回403查目录权限;返回502查PHP-FPM。

宝塔面板下LNMP子域名绑定怎么配置才能生效

宝塔用户大多不想碰命令行,面板确实把流程简化了,但几个开关没点对一样不生效,宝塔的站点配置存放在/www/server/panel/vhost/nginx/,本质还是生成Nginx配置。

新建站点时直接填子域名

在“网站-添加站点”里,域名一栏填shop.example.com,会自动生成根目录/www/wwwroot/shop.example.com和独立PHP-FPM池,这是最省事的方式。

已有主站如何追加子域名

进入主站设置,找到“域名管理”,把子域名添加进去,注意:这样添加后子域名和主站共用一个根目录,如果你的目的是让子域名指向独立程序,应该新建站点,而不是在主站里追加。

SSL证书与强制HTTPS的注意点

子域名要单独申请证书,主站的证书不覆盖二级域名(通配符证书除外),宝塔里在子域名站点设置中申请Let's Encrypt,勾选“强制HTTPS”后会写入301跳转,若主站已开强制HTTPS,子域名的80端口访问会被跳转,测试时直接用https://验证。

业内专家指出,证书与域名不匹配是子域名HTTPS报错的头号原因,申请前确认证书的SAN列表包含该子域名。

绑定后打不开?LNMP子域名绑定常见故障排查

解析层面:缓存与记录类型

  • 本地DNS缓存:换dig @8.8.8.8 shop.example.com测试
  • 记录类型写错:想走CDN却填了A记录
  • 主机记录填了完整域名:变成shop.example.com.example.com

Nginx层面:server_name冲突与default_server

用nginx -T | grep server_name列出所有server块,确认没有重复,如果子域名配置写在主站文件之后且主站有default_server,未匹配请求会落到主站,另外检查是否漏写listen 80;。

权限与运行环境

  • 目录属主是否为www
  • .user.ini是否残留旧路径限制
  • 防火墙与安全组是否放行80/443
  • SELinux开启时是否拦截了目录读取

应用层面:框架的URL配置

WordPress、Laravel这类程序会在数据库或.env里写死站点URL,绑定子域名后要同步改siteurl和home,否则页面资源仍指向主域名,表现为“能打开但样式全乱”。

手工配置与面板配置的取舍对比

对比项 命令行手工vhost 宝塔面板添加
操作门槛 需熟悉Nginx语法 图形化,上手快
配置位置 /usr/local/nginx/conf/vhost/ /www/server/panel/vhost/nginx/
PHP-FPM 常与主站共用池 默认独立池
SSL申请 需acme.sh或certbot手动 面板一键签发
批量管理 脚本可批量生成 逐个站点操作
适合场景 多子域名、自动化运维 少量站点、个人项目

行业共识认为,子域名数量超过十个后,手工维护vhost的出错率会明显上升,此时用配置模板加脚本生成更稳妥。

Q&A:LNMP子域名绑定与配置生效的常见疑问

子域名绑定后访问到主站内容,是什么原因?

Nginx没匹配到子域名的server_name,请求落到了default_server,检查子域名配置文件的server_name拼写、文件是否在include vhost/.conf的加载路径内,以及是否执行过reload,用nginx -T输出完整配置逐段核对最快。

LNMP子域名绑定需要单独装PHP吗?

不需要,PHP-FPM是进程池概念,同一套PHP二进制可以服务多个站点,共用池时确认open_basedir包含新目录;独立池则复制一份pool配置改user、group、listen套接字路径即可隔离运行环境。

子域名必须单独申请SSL证书吗?

普通单域名证书只覆盖申请时填写的那个主机名,主站证书不包含shop.example.com,要么给子域名单独签发,要么使用通配符证书.example.com,近年来免费证书签发已很普及,单站点单独申请的成本并不高,维护上反而更清晰。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱