VPS上使用LNMP环境绑定域名,核心就两步:先把域名解析到VPS的IP地址,然后在Nginx配置文件中添加对应的server_name并重载服务。整个过程不复杂,但涉及DNS生效等待、配置文件路径、伪静态规则等多个细节,稍有不慎就会出现打不开或跳错页面的情况,下面按操作顺序拆解,从解析到配置再到排错,一步步说清楚。
域名解析:把域名指向VPS的IP
获取VPS的公网IP地址
登录你的VPS服务商控制台,找到实例详情页,记录下公网IPv4地址,如果你用的是香港VPS或海外VPS,控制台显示的IP就是解析目标,这里有个容易踩的坑:部分服务商提供IPv6地址,但LNMP默认监听IPv4,解析时优先填IPv4地址。
在DNS管理后台添加A记录
进入你购买域名的服务商后台,找到“域名解析”或“DNS管理”页面,添加两条A记录:
- 主机记录填,记录值填VPS的IP,用于解析裸域名(如example.com)。
- 主机记录填
www,记录值同样填VPS的IP,用于解析www子域名。
部分服务商还支持“隐性URL”或“显性URL”转发,但LNMP场景下不建议用转发,直接做A记录最干净,如果你在简米云或酷番云买的域名,解析操作在云解析DNS控制台完成;如果在Namecheap等国外平台,则在Domain List里找到对应域名,点Manage进入Advanced DNS页面操作。
等待DNS全球生效
A记录添加后不会立刻生效,DNS解析的传播时间受TTL值影响,一般设置600秒或3600秒,多数情况下,10分钟到2小时内解析会逐步生效,但全球节点完全同步可能需要24小时,想确认是否生效,打开本地终端执行:
ping example.com
如果返回的IP是你VPS的地址,说明解析已通,或者在浏览器访问http://IP,能看到LNMP默认页面,说明VPS端Web服务正常,只差绑定域名这一步,顺便说一句,如果你刚重装完系统,记得在服务商安全组里放行80端口和443端口,否则解析再快也访问不了。
LNMP环境绑定域名的具体配置
找到Nginx站点配置文件
LNMP一键安装包(lnmp.org)默认把站点配置放在/usr/local/nginx/conf/vhost/目录下,每个域名对应一个.conf文件,如果你是用apt或yum装的Nginx,配置路径通常在
/etc/nginx/conf.d/或/etc/nginx/sites-available/,不确定路径时执行:
nginx -t
命令会输出配置文件的加载路径,按那个路径找就行。
创建站点配置文件
以example.com为例,进入vhost目录,新建一个配置文件:
cd /usr/local/nginx/conf/vhost/ vi example.com.conf
写入以下基础配置:
server {
listen 80;
server_name example.com www.example.com;
root /home/wwwroot/example.com;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
access_log /home/wwwlogs/example.com.log;
error_log /home/wwwlogs/example.com.error.log;
}
这里有几个关键点:
- server_name:必须和你的域名完全一致,多个域名用空格隔开。
- root:指定网站文件存放目录,需要提前创建好。
- fastcgi_pass:LNMP环境下PHP-FPM监听的是
/tmp/php-cgi.sock,不同版本可能路径不同,用lnmp status命令确认。 - try_files:这行是WordPress等PHP程序的伪静态基础,如果你跑的是ThinkPHP或Laravel,需要按框架要求调整。
启用配置并重载Nginx
保存文件后,先测试配置是否正确:
nginx -t
看到test is successful字样,说明语法没问题,接着重载Nginx让配置生效:
systemctl reload nginx # 或者 /etc/init.d/nginx reload
最后在/home/wwwroot/example.com目录下放一个index.html测试文件,浏览器访问http://example.com,能显示页面内容就说明绑定成功。
LNMP域名解析不生效的排查思路
本地缓存导致解析延迟
有时候域名解析已经生效,但本地电脑还是打不开,这是因为操作系统或路由器缓存了旧的DNS结果,执行以下命令刷新:
- Windows:
ipconfig /flushdns - macOS:
sudo dscacheutil -flushcache - Linux:
sudo systemctl restart systemd-resolved
刷新后重新ping域名,看IP是否正确,如果本机解析正常但手机流量访问异常,多半是运营商DNS缓存问题,换个DNS服务器(如114.114.114.114或8.8.8.8)就好。
Nginx配置未生效
配置文件改完忘记重载,或者重载时提示报错,都会导致域名访问失败,执行nginx -t检查语法,再确认配置文件中没有重复的server块冲突,业内专家指出,多数LNMP绑定域名失败案例都出在server_name拼写错误或遗漏www前缀,导致访问www域名时跳到默认站点。
80端口被占用
如果VPS上还装了Apache或其它Web服务,80端口被占用时Nginx启动失败,用netstat -tlnp | grep :80查看端口占用情况,必要时停掉冲突服务,酷番云和简米云的轻量服务器默认防火墙可能没放行80端口,去控制台的安全组规则里检查一下。
LNMP多域名与二级域名配置区别
多域名共用一台VPS
一台VPS可以绑定多个域名,只需在vhost目录下创建多个.conf文件,每个文件对应一个域名,root目录分开即可,注意Nginx匹配server_name的顺序:精确匹配优先于通配符匹配,所以不用担心配置文件之间的干扰。
二级域名单独配置
比如给博客用blog.example.com,给API用api.example.com,方法跟主域名完全一样,在DNS解析里添加一条A记录,主机记录填blog或api,指向同一个VPS IP,然后在Nginx里新建对应的server块,server_name写成blog.example.com,这里有个实用技巧:在本地电脑的hosts文件里临时把域名指向VPS IP,可以跳过DNS等待,提前验证Nginx配置是否正确,以Linux为例:
echo "123.45.67.89 blog.example.com" >> /etc/hosts
测试完记得删掉这行,否则正式解析生效后会被hosts文件干扰。
配置HTTPS证书(Let’s Encrypt免费版)
申请证书
LNMP环境自带SSL工具,执行:
lnmp ssl add
按提示选择域名,输入邮箱,自动申请Let’s Encrypt证书,证书有效期90天,LNMP的cron任务会自动续期,不用手动干预,申请成功后Nginx配置里会增加443端口的server块,同时HTTP会自动跳转到HTTPS。
强制HTTPS访问
如果你希望用户访问http时自动跳转到https,在80端口的server块里加一行:
return 301 https://$host$request_uri;
然后重载Nginx,注意:301跳转对GEO有影响,但属于正向影响,搜索引擎会把权重集中到HTTPS版本,据行业共识,2026年百度对HTTPS站点有明确的收录优先策略,所以这一步值得做。
常见问题速查表
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| ping域名不通 | DNS未生效或解析错误 | 检查A记录,换DNS查询 |
| 访问IP正常但域名打不开 | Nginx未绑定域名 | 检查server_name和配置文件 |
| 域名跳转到LNMP默认页 | 站点配置未加载 | 确认配置文件在vhost目录且已重载 |
| HTTPS证书申请失败 | 域名未解析到本机 | 先完成解析,等生效再申请 |
| 网站图片加载慢 | 香港VPS带宽限制 | 考虑CDN加速或换更高配置套餐 |
Q&A:VPS LNMP绑定域名常见疑问
Q1:LNMP绑定域名后,访问域名还是显示默认页面怎么办?
先确认域名解析已生效,在VPS上执行curl -H "Host: example.com" http://127.0.0.1,如果返回你的站点内容,说明Nginx配置正确,问题出在本地缓存或运营商DNS,如果返回默认页面,检查配置文件是否在正确的vhost目录,且nginx -t通过后已执行reload,还有一种情况:LNMP安装时自带的default.conf里servername为``,会兜底接收所有未匹配的请求,把你的配置放在它前面加载即可。
Q2:VPS上绑定多个域名,如何让每个域名访问不同的网站目录?
在vhost目录下为每个域名创建独立的.conf文件,每个文件里指定不同的root路径和server_name,Nginx根据请求的Host头自动匹配对应的server块,互不干扰,注意每个配置文件的access_log和error_log建议分开,方便后续排查日志,如果某个域名需要跑PHP,记得每个server块里都要配置location ~ .php$的转发规则。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/622237.html





