You need to enable JavaScript to run this app. 离线局域网内Nginx多子域名应用反向代理配置不生效的解决方法
优惠活动
大模型
产品
解决方案
定价
更多

离线局域网内Nginx多子域名应用反向代理配置不生效的解决方法

局域网子域名反向代理配置指南

之前配置不生效的核心原因

你遇到的配置失效问题,基本来自两个极易踩的坑:

  • 仅在路由器DNS配置了home的解析规则,没有添加泛域名解析,所有*.home的子域名请求在解析层就无法指向树莓派,根本到不了Nginx
  • Nginx的server块优先级设置错误,主站的兜底规则、或者Nginx自带的默认站点配置会无差别接住所有请求,匹配不到你单独写的子域名规则

第一步:完成路由器DNS泛解析配置

路由器不会自动将父域名的解析规则复用到所有子域名,必须单独添加泛解析规则:

  • 进入路由器DNS配置页,新增A记录规则:主机名填写*.home,解析值和home的规则保持一致,指向树莓派的固定本地IP
  • 配置完成后在任意局域网设备执行nslookup app1.home,确认返回的IP和树莓派IP一致,解析层即打通

若你的路由器不支持泛域名解析,临时方案是在每台需要访问的设备上修改hosts文件,手动将每个子域名映射到树莓派IP,但这种方式扩展性差,后续新增应用需要逐台修改,不推荐长期使用。


第二步:按正确结构配置Nginx规则

不需要为每个应用单独拆分零散配置文件,树莓派上统一管理更易维护,按以下步骤操作:

  1. 清理冗余配置
    • 删除/etc/nginx/sites-enabled/下Nginx自带默认站点的软链接(这是配置不生效的最常见元凶,它会作为兜底接住所有未匹配的请求)
    • 删除之前测试时写的零散单应用配置,避免规则冲突
  2. 新建统一配置文件
    在/etc/nginx/sites-available/目录下创建local_proxy.conf,严格按照以下顺序写入规则(server块顺序直接影响Nginx的匹配优先级):
    • 第一个块写主站home的服务,作为所有未匹配子域名的兜底:
    # 主站 home 服务配置
    server {
        listen 80;
        server_name home;
        # 替换为你原本主站的根目录或代理目标
        root /var/www/html;
        index index.html;
    }
    
    • 后续依次追加每个子域名的反向代理规则:
    # app1.home 反向代理到本地3000端口
    server {
        listen 80;
        server_name app1.home;
        location / {
            proxy_pass http://127.0.0.1:3000;
            # 反向代理必备请求头,避免后端应用无法获取真实访问信息
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    
    # app2.home 反向代理到本地3001端口
    server {
        listen 80;
        server_name app2.home;
        location / {
            proxy_pass http://127.0.0.1:3001;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    
  3. 加载配置并校验
    • 建立软链接让Nginx识别新配置:
      sudo ln -s /etc/nginx/sites-available/local_proxy.conf /etc/nginx/sites-enabled/
    • 执行语法检查,确认配置无拼写错误:
      sudo nginx -t
    • 看到输出syntax is ok、test is successful后,重载Nginx使配置生效:
      sudo systemctl reload nginx

第三步:分层验证配置连通性

按照从内到外的顺序排查,快速定位问题:

  1. 先在树莓派本地验证Nginx规则:执行curl -H "Host: app1.home" http://127.0.0.1,如果能正常返回app1应用的页面,说明Nginx配置本身无问题
  2. 再在局域网其他设备上访问http://app1.home、http://app2.home,确认分流逻辑正常

常见踩坑提示:

  • 若子域名访问异常,先清理本地DNS缓存:Windows执行ipconfig /flushdns,macOS/Linux执行sudo systemctl restart nscd,排除路由器或设备的旧缓存干扰
  • 确认树莓派防火墙未拦截局域网对80端口的访问,开启ufw的设备需要放行局域网网段的80端口访问
  • 后续新增应用仅需在配置文件中照着现有格式追加新的server块,重载Nginx即可,无需修改DNS规则(泛解析已覆盖所有子域名)

内容的提问来源于stack exchange,提问作者Zheoni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 08:36:10