Nginx外网域名部署全实战,从域名解析到本地+公网后端,轻松打通内外网
中小型站长、个人开发者常常会遇到这样的场景:本地或云服务器上跑了个网站/API服务,只有 IP 地址,但想让朋友、用户通过易记的外网域名访问?这时候「Nginx+公网解析」就是最主流、性价比最高的方案——既可以隐藏真实 IP 保护后端,还能做负载均衡、SSL 加密、缓存加速等进阶操作。
本文将从「域名解析基础」「Nginx 安装入门」「基础配置:把域名绑定单后端」「进阶优化:加 HTTPS/反向代理本地服务」四个维度,一步步带你落地。
前置准备
在开始前,确保你已经准备好了这三样东西:
- 已注册并实名认证的外网域名(比如从阿里云、腾讯云、Namecheap 购买的
.com/.cn/.dev等); - 有公网 IP 的服务器/VPS(国内阿里云/腾讯云轻量应用服务器很便宜,适合入门;如果是家庭宽带,要确认运营商给的是公网 IP,并且光猫/路由器能做端口映射);
- 后端服务已正常运行(比如本地的
0.0.1:3000前端项目,或者云服务器上的0.0.1:8080后端 API,或者默认的 Nginx 静态页也可以)。
第一步:把域名解析到你的公网 IP
这一步相当于给“互联网地图”上的你的服务器/VPS/映射后的公网设备挂上名字,非常简单:
- 登录你的域名注册商控制台(比如阿里云“域名控制台”→“我的域名”→找到目标域名→“解析”);
- 添加两条A记录(如果是IPv6则用AAAA记录):
- 主机记录填 :代表直接访问根域名(
example.com); - 主机记录填
www:代表访问带www的子域名(www.example.com); - 记录值都填你的公网 IPv4 地址(云服务器可以在控制台“实例详情”里找到;家庭宽带映射的公网设备可以在光猫/路由器“状态页”找WAN口公网IP);
- TTL默认600秒即可(也就是解析生效的最长等待时间,新手不用改)。
- 主机记录填 :代表直接访问根域名(
验证解析是否生效:打开终端(Windows用CMD/PowerShell,Mac/Linux用Terminal),输入
ping example.com,如果返回的是你的公网IP,说明基础解析成功!
第二步:在服务器/VPS上安装 Nginx
如果是家庭宽带本地反向代理,需要在本地电脑装 Nginx(或者本地网络里的设备);如果是云服务器直接在云服务器上装,这里以主流的 Linux 发行版(Ubuntu/CentOS)为例:
Ubuntu/Debian 系列
# 1. 更新软件源 sudo apt update && sudo apt upgrade -y # 2. 安装 Nginx sudo apt install nginx -y # 3. 启动并设置开机自启 sudo systemctl start nginx sudo systemctl enable nginx
CentOS/RHEL 系列
# 1. 安装 EPEL 源(提供 Nginx 的稳定包) sudo yum install epel-release -y # 2. 安装 Nginx sudo yum install nginx -y # 3. 启动并设置开机自启 sudo systemctl start nginx sudo systemctl enable nginx
验证 Nginx 是否安装成功:在浏览器里直接访问你的公网 IP(
http://123.45.67.89),如果看到 Nginx 默认的“Welcome to nginx!”页面,就说明没问题了!
第三步:基础配置:把外网域名绑定单后端服务
现在我们要让 Nginx 监听「外网域名的请求」,然后把请求转发给后端,Nginx 的核心配置文件在 /etc/nginx/nginx.conf,但为了方便管理(特别是后期加多个域名),建议把每个域名的独立配置放在 /etc/nginx/sites-available/ 目录下(Ubuntu默认有,CentOS可能需要手动创建),然后用软链接链接到 /etc/nginx/sites-enabled/ 目录下生效。
创建独立配置文件
假设你的:
- 外网域名为
myblog.com; - 后端服务是 Nginx 默认的静态页(路径在
/var/www/html/),或者你自己的前端静态页放在/home/ubuntu/myblog/dist/; - 如果是动态后端(Node.js 3000端口、Java 8080端口),后面会补充反向代理配置。
配置静态页(默认或自定义)
在终端输入:
# 1. 创建配置文件(文件名随便,建议和域名一致)
sudo nano /etc/nginx/sites-available/myblog.com
```到文件里(注意替换注释里的部分):
```nginx
server {
# 监听 HTTP 80 端口(默认端口,浏览器不加 :80 也能访问)
listen 80;
listen [::]:80; # 可选:监听 IPv6 80 端口
# 绑定的外网域名(根域名和www都可以,或者只写一个)
server_name myblog.com www.myblog.com;
# 网站根目录(这里换成你自己的静态页路径)
root /home/ubuntu/myblog/dist;
# 默认首页(按优先级找)
index index.html index.htm;
# 静态文件缓存规则(可选,提升访问速度)
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 30d; # 缓存30天
add_header Cache-Control "public, immutable";
}
# 处理找不到文件的请求(可选,SPA 单页应用的路由配置)
location / {
try_files $uri $uri/ /index.html;
}
}
配置动态后端(反向代理)
如果你的后端是运行在本地/服务器上的某个端口(Node.js 的 0.0.1:3000),就把上面的 root、index、静态缓存下面的 location / 替换成:
server {
listen 80;
listen [::]:80;
server_name myapi.com www.myapi.com;
# 反向代理配置
location / {
# 把请求转发给后端
proxy_pass http://127.0.0.1:3000;
# 保留客户端的真实 IP(后端可能需要用到)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 反向代理超时时间(可选,适合大文件上传/长连接请求)
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
软链接配置文件(让 Nginx 生效)
Ubuntu/Debian(已有 sites-available 和 sites-enabled)
# 创建软链接 sudo ln -s /etc/nginx/sites-available/myblog.com /etc/nginx/sites-enabled/ # 可选:删除默认的 default 配置(避免冲突) sudo rm /etc/nginx/sites-enabled/default
CentOS/RHEL(需要手动创建目录并修改主配置)
# 1. 创建两个目录 sudo mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled # 2. 编辑主配置文件,引入 sites-enabled 下的所有配置 sudo nano /etc/nginx/nginx.conf
找到 http { ... } 块的末尾,在 include /etc/nginx/conf.d/*.conf; 下面加一行:
include /etc/nginx/sites-enabled/*;
然后保存退出(Ctrl+O,回车,Ctrl+X),最后创建软链接:
sudo ln -s /etc/nginx/sites-available/myblog.com /etc/nginx/sites-enabled/
检查配置并重启 Nginx
每次修改配置后,必须先检查语法,否则可能导致 Nginx 无法启动:
sudo nginx -t
如果看到 syntax is ok 和 test is successful,就可以重启了:
sudo systemctl restart nginx
验证绑定是否成功
现在在浏览器里访问你的外网域名(http://myblog.com 或 http://www.myapi.com),如果能看到你的静态页或动态后端的响应,就说明基础配置完成了!
第四步:进阶优化:加 HTTPS 加密(推荐必做)
现在的浏览器(Chrome、Edge、Safari等)对 HTTP 网站会显示“不安全”标识,甚至影响搜索排名,所以强烈建议加免费的 Let's Encrypt SSL 证书,让域名变成 https://。
这里用最简单的工具 Certbot 来自动申请、续期证书:
安装 Certbot 和 Nginx 插件
Ubuntu/Debian
sudo apt install certbot python3-certbot-nginx -y
CentOS/RHEL
sudo yum install certbot python3-certbot-nginx -y
自动申请并配置 SSL 证书
Certbot 会自动读取你刚才写的 Nginx 配置文件里的 server_name,然后一键申请证书、修改配置、开启 HTTPS、自动续期:
sudo certbot --nginx
然后按照提示操作:
- 输入你的邮箱地址(用来接收证书过期提醒);
- 同意 Let's Encrypt 的服务条款;
- 选择是否分享你的邮箱给他们的合作方(选 N 就行);
- 选择要配置 HTTPS 的域名编号(如果有多个域名的话);
- 关键一步:选择是否自动将 HTTP 重定向到 HTTPS(选
2,这样所有访问http://myblog.com的请求都会自动跳转到https://,更安全)。
验证 HTTPS 是否生效
访问你的外网域名(http://myblog.com),如果自动跳转到 https://myblog.com,并且浏览器地址栏左边有个绿色的小锁,就说明 SSL 配置成功了!
Certbot 会自动设置证书续期定时任务(默认每 12 小时检查一次,证书有效期 90 天,快过期时自动续期),不用手动管。
常见问题排查
-
解析一直不生效:
- 检查 A 记录的记录值是否是正确的公网 IP;
- 尝试清除本地 DNS 缓存(Windows 用
ipconfig /flushdns,Mac/Linux 用不同命令,或者换个网络/浏览器试试); - 有些域名解析需要 24 小时才能完全生效(但大部分 10 分钟内就行)。
-
访问公网 IP 正常,但访问域名不行:
- 检查解析是否生效(用
ping example.com); - 检查 Nginx 配置文件里的
server_name是否正确; - 检查防火墙是否开放了 80/443 端口(云服务器需要在控制台“安全组”里加规则;Ubuntu 用
sudo ufw allow 'Nginx Full';CentOS 用sudo firewall-cmd --add-service=http --permanent && sudo firewall-cmd --add-service=https --permanent && sudo firewall-cmd --reload)。
- 检查解析是否生效(用
-
反向代理失败:
- 检查后端服务是否正常运行(比如访问
http://127.0.0.1:3000); - 检查 Nginx 配置文件里的
proxy_pass是否正确(注意最后有没有斜杠,有斜杠会把匹配到的路径去掉,没有斜杠会保留); - 检查防火墙是否开放了后端服务的端口(如果后端在同一台服务器上,不需要开放;如果在不同设备上,需要开放)。
- 检查后端服务是否正常运行(比如访问
通过「域名解析→Nginx 安装→基础绑定→SSL 加密」这四步,你就可以轻松地用外网域名访问你的网站/API服务了,Nginx 还有很多强大的功能,比如负载均衡(多个后端分担流量)、限流防刷、Gzip 压缩等,感兴趣的可以继续深入学习!

