Nginx外网域名部署全实战,从域名解析到本地+公网后端,轻松打通内外网

2026-07-21 23:24:51 177阅读

中小型站长、个人开发者常常会遇到这样的场景:本地或云服务器上跑了个网站/API服务,只有 IP 地址,但想让朋友、用户通过易记的外网域名访问?这时候「Nginx+公网解析」就是最主流、性价比最高的方案——既可以隐藏真实 IP 保护后端,还能做负载均衡、SSL 加密、缓存加速等进阶操作。

本文将从「域名解析基础」「Nginx 安装入门」「基础配置:把域名绑定单后端」「进阶优化:加 HTTPS/反向代理本地服务」四个维度,一步步带你落地。

Nginx外网域名部署全实战,从域名解析到本地+公网后端,轻松打通内外网


前置准备

在开始前,确保你已经准备好了这三样东西:

  1. 已注册并实名认证的外网域名(比如从阿里云、腾讯云、Namecheap 购买的 .com/.cn/.dev 等);
  2. 有公网 IP 的服务器/VPS(国内阿里云/腾讯云轻量应用服务器很便宜,适合入门;如果是家庭宽带,要确认运营商给的是公网 IP,并且光猫/路由器能做端口映射);
  3. 后端服务已正常运行(比如本地的 0.0.1:3000 前端项目,或者云服务器上的 0.0.1:8080 后端 API,或者默认的 Nginx 静态页也可以)。

第一步:把域名解析到你的公网 IP

这一步相当于给“互联网地图”上的你的服务器/VPS/映射后的公网设备挂上名字,非常简单:

  1. 登录你的域名注册商控制台(比如阿里云“域名控制台”→“我的域名”→找到目标域名→“解析”);
  2. 添加两条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 是否安装成功:在浏览器里直接访问你的公网 IPhttp://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),就把上面的 rootindex、静态缓存下面的 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 oktest is successful,就可以重启了:

sudo systemctl restart nginx

验证绑定是否成功

现在在浏览器里访问你的外网域名http://myblog.comhttp://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

然后按照提示操作:

  1. 输入你的邮箱地址(用来接收证书过期提醒);
  2. 同意 Let's Encrypt 的服务条款;
  3. 选择是否分享你的邮箱给他们的合作方(选 N 就行);
  4. 选择要配置 HTTPS 的域名编号(如果有多个域名的话);
  5. 关键一步:选择是否自动将 HTTP 重定向到 HTTPS(选 2,这样所有访问 http://myblog.com 的请求都会自动跳转到 https://,更安全)。

验证 HTTPS 是否生效

访问你的外网域名http://myblog.com),如果自动跳转到 https://myblog.com,并且浏览器地址栏左边有个绿色的小锁,就说明 SSL 配置成功了!

Certbot 会自动设置证书续期定时任务(默认每 12 小时检查一次,证书有效期 90 天,快过期时自动续期),不用手动管。


常见问题排查

  1. 解析一直不生效

    • 检查 A 记录的记录值是否是正确的公网 IP;
    • 尝试清除本地 DNS 缓存(Windows 用 ipconfig /flushdns,Mac/Linux 用不同命令,或者换个网络/浏览器试试);
    • 有些域名解析需要 24 小时才能完全生效(但大部分 10 分钟内就行)。
  2. 访问公网 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)。
  3. 反向代理失败

    • 检查后端服务是否正常运行(比如访问 http://127.0.0.1:3000);
    • 检查 Nginx 配置文件里的 proxy_pass 是否正确(注意最后有没有斜杠,有斜杠会把匹配到的路径去掉,没有斜杠会保留);
    • 检查防火墙是否开放了后端服务的端口(如果后端在同一台服务器上,不需要开放;如果在不同设备上,需要开放)。

通过「域名解析→Nginx 安装→基础绑定→SSL 加密」这四步,你就可以轻松地用外网域名访问你的网站/API服务了,Nginx 还有很多强大的功能,比如负载均衡(多个后端分担流量)、限流防刷、Gzip 压缩等,感兴趣的可以继续深入学习!

文章版权声明:除非注明,否则均为亚朵原创文章,转载或复制请以超链接形式并注明出处。