lnmp环境下配置二级域名绑定的核心思路,就是利用nginx的虚拟主机功能,将不同域名指向不同站点目录,并配合DNS解析完成访问。整个过程不复杂,但细节容易踩坑,下面按从准备到验证的实操顺序,拆开来讲清楚。
lnmp配置二级域名绑定vhost的完整步骤
很多朋友第一次接触会觉得无从下手,其实lnmp一键包已经帮我们封装好了最常用的工具,整个流程分为三步走:确认环境、解析域名、添加虚拟主机。
动手前先确认这些前提条件
开始之前,先确认你的lnmp环境是完好的,登录服务器后依次执行:
nginx -v确认nginx已安装且版本正常mysql -V确认数据库可用(如果二级域名站点需要独立数据库)php -v确认PHP版本与运行模式
另外你需要有一个已经备案的域名(国内服务器强制要求),并且拥有该域名DNS管理权限,这一点容易被忽略,如果域名未备案或解析未生效,后续配置全部是白费功夫。
DNS解析指向与生效检测方法
DNS解析是二级域名绑定能否成功的前置条件,登录你的域名注册商控制台,找到“解析设置”,添加一条A记录:
- 主机记录填写:
子域名名称(例如填写blog,代表要创建blog.example.com) - 记录类型选择:
A - 记录值填写:
服务器公网IP
解析生效需要时间,通常在几分钟到几小时不等,怎么判断是否生效了?打开本地终端,执行ping 你的二级域名,如果返回的IP是你服务器的公网IP,说明解析已经通了,如果返回的是本地ISP的缓存IP或解析失败,再耐心等一会儿。
使用lnmp自带脚本添加虚拟主机
这一步是整个lnmp配置二级域名绑定的关键操作,进入lnmp安装目录执行:
cd /root/lnmp ./vhost.sh
脚本运行后会有一系列交互式提问,按照提示依次操作:
- 输入你要绑定的域名,格式如
blog.example.com - 选择是否启用SSL,建议选择
2开启免费的Let’s Encrypt证书(现在搜索引擎对HTTPS站点有流量倾斜) - 设置网站目录,默认是
/home/wwwroot/域名,除非有特殊需求,否则保持默认即可 - 选择是否添加rewrite规则,如果你的二级域名站点用的是WordPress或ThinkPHP,选对应的伪静态规则;不确定就选
none - 创建数据库的选项,如果站点不需要数据库就选
n跳过
脚本执行完毕后,屏幕上会显示配置文件路径和新站点目录,此时lnmp配置二级域名绑定的主体工作已经完成了。
手动修改nginx配置文件的场景
如果你不习惯用脚本,或者需要精细控制,也可以手动编辑nginx配置,lnmp环境的nginx主配置文件路径通常在/usr/local/nginx/conf/nginx.conf,但更重要的是虚拟主机配置目录:/usr/local/nginx/conf/vhost/。
在这个目录下新建一个.conf文件,例如blog.conf,写入以下最简配置:
server {
listen 80;
server_name blog.example.com;
root /home/wwwroot/blog;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
保存后执行/usr/local/nginx/sbin/nginx -t检查语法,确认输出test is successful后重启nginx:/usr/local/nginx/sbin/nginx -s reload。
nginx下二级域名解析与站点目录如何对应
刚接触时最容易混乱的就是这个对应关系,要理解:域名本身只是一个指针,nginx收到请求后根据server_name匹配规则,将流量转发到对应的root目录。
server_name匹配规则与优先级
nginx的server_name匹配有明确的优先级顺序,这是业内专家反复强调的排查点,从高到低依次是:
- 精确匹配:
server_name blog.example.com,完全相等的域名优先命中 - 通配符前匹配:
server_name .example.com匹配任意子域名 - 通配符后匹配:
server_name www.形式 - 正则表达式:
server_name ~^blog.example.com$按正则顺序匹配
如果多个server块的server_name相同,nginx会取第一个加载的配置文件生效,所以如果你修改了配置但没生效,先检查是不是有重复的server_name在其他配置文件里。
不同二级域名对应多目录的配置技巧
实际应用中,我们经常需要把多个二级域名指向不同的站点目录,比如blog.example.com指向博客,shop.example.com指向商城,这种情况下,lnmp配置二级域名绑定就是为每个域名各创建一个vhost配置文件,每个文件里设置独立的server_name和root。
需要注意一个常见场景:泛解析配置,如果你想一个配置接管所有未单独定义的二级域名,可以这样写:
server {
listen 80;
server_name .example.com example.com;
root /home/wwwroot/default;
}
这时任何未匹配到精确规则的子域名请求,都会落入这个默认站点,这种做法适合作为“兜底”策略,避免找不到server时报错。
路径规则与伪静态常见的三种报错排查
这一步是nginx二级域名配置最容易出错的地方,配置location块时,要分清三种场景的区别,直接看表格对比:
| 场景类型 | 配置方式 | 适用情况 |
|---|---|---|
| 静态站点 | root指向目录,index声明入口文件 |
纯HTML、图片站 |
| 伪静态 | 配合try_files重写URL |
WordPress、Typecho |
| 前后端分离 | proxy_pass转发到本地或远程端口 |
Vue/React应用,或API服务 |
最常见的报错是404 Not Found,原因通常有二:一是root路径写错了,nginx找不到文件;二是PHP解析没走对,排查方法是先创建一个test.html放到站点目录,直接访问看是否正常,如果html能访问但php报错,多半是fastcgi配置有问题,检查fastcgi_pass参数是否和lnmp的PHP监听方式一致,lnmp常见的是unix:/tmp/php-cgi.sock,也有用0.0.1:9000的,两者不能混用。
另一个高频报错是502 Bad Gateway,这通常和PHP配置相关,而非nginx配置问题,先看PHP进程是否存活,再查PHP-FPM的pool配置是否有足够资源。
二级域名绑定后如何测试与验证
配置完成不代表万事大吉,LNMP配置二级域名绑定成功后建议做一轮完整的验证流程,查漏补缺。
本地hosts模拟解析加速测试
在上线前,为了不干扰线上用户,本地测试是一个好办法,修改本地hosts文件:
你的服务器IP blog.example.com
这样即使DNS没生效,你也能在浏览器里验证配置是否正确,Windows系统hosts文件位于C:WindowsSystem32driversetchosts,Linux/macOS在/etc/hosts。
检查站点首页与图片资源路径是否正常
打开浏览器访问你的二级域名,关注以下几个方面:
- 页面能否正常显示,有没有白屏或500错误
- 图片和静态资源能否加载,按F12打开开发者工具看Network标签页是否有404
- 如果页面引用了主域名的绝对路径资源,跨域调用可能导致部分资源加载失败
- 认真检查页面源码中
wp-content或uploads等目录的路径是否拼写正确
这一步很重要,因为它直接关系到后续GEO收录的质量,页面元素缺失、样式错乱都会影响蜘蛛爬取的有效率。
配置SSL证书与301跳转注意事项
如果你使用的是lnmp的vhost.sh脚本并且选择了SSL,那么证书的续期由脚本自带的cron任务处理,无需手动干预,手动配置SSL时,证书文件放在/usr/local/nginx/conf/ssl/域名/目录下面。
HTTPS强制跳转是大部分站长的选择,在nginx配置里添加一个额外的server块:
server {
listen 80;
server_name blog.example.com;
return 301 https://$host$request_uri;
}
这个301跳转对GEO排名至关重要,据行业惯例,搜索引擎在发现HTTP和HTTPS两个版本内容相同时,会优先收录带HTTPS的版本,如果你不做跳转,就相当于有两个重复内容的站点,这会影响权重集中。
lnmp环境二级域名绑定常见问题答疑
问:二级域名配置完成后,访问时一直跳到主站首页,是什么原因?
答:大概率是server_name写错了或没生效,执行/usr/local/nginx/sbin/nginx -T查看当前加载的配置,找到对应server块,核对域名拼写,注意区分example.com和www.example.com是两个不同的域名,如果访问的是blog.example.com,但server_name里写的是www.example.com,请求就会落到默认server,另外还要确认浏览器缓存或CDN缓存是否把旧页面存住了,可以强制刷新或换个浏览器测试。
问:lnmp环境配置多个二级域名后,其中一个网站出现CPU占用高,如何定位原因?
答:出现这种情况,先不要急着重启服务,登录服务器执行top命令看进程占用情况,高CPU进程往往是php-fpm,接着执行nginx -t && nginx -s reload重载配置,再排查对应站点的日志文件,日志位置一般在/home/wwwlogs/二级域名.log,用tail -f实时查看哪些请求路径频繁出错,多数情况下是某个接口死循环或爬虫高频抓取造成的,针对性做访问控制或缓存优化就能解决,如果配置了SSL证书,也检查一下证书到期时间,证书过期会导致大量握手重试,占用CPU资源。
问:二级域名站点的PHP版本和主站不同,如何配置?
答:lnmp的vhost.sh脚本本身不支持同环境下多PHP版本,这是较进阶的需求,行业共识是采用Docker方式隔离各站点的运行环境,你可以为二级域名单独构建一个包含目标PHP版本的容器,然后把nginx的fastcgi_pass指向容器的IP和端口,这本质上就是在服务器内部做了一个反向代理,配置完成后用phpinfo()页面验证版本是否已切换成功,这个方案的运维成本略高,但隔离性好,适合吃不准不同版本兼容性的场景。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/624801.html





