离线局域网内Nginx多子域名应用反向代理配置不生效的解决方法
局域网子域名反向代理配置指南
之前配置不生效的核心原因
你遇到的配置失效问题,基本来自两个极易踩的坑:
- 仅在路由器DNS配置了
home的解析规则,没有添加泛域名解析,所有*.home的子域名请求在解析层就无法指向树莓派,根本到不了Nginx - Nginx的server块优先级设置错误,主站的兜底规则、或者Nginx自带的默认站点配置会无差别接住所有请求,匹配不到你单独写的子域名规则
第一步:完成路由器DNS泛解析配置
路由器不会自动将父域名的解析规则复用到所有子域名,必须单独添加泛解析规则:
- 进入路由器DNS配置页,新增A记录规则:主机名填写
*.home,解析值和home的规则保持一致,指向树莓派的固定本地IP - 配置完成后在任意局域网设备执行
nslookup app1.home,确认返回的IP和树莓派IP一致,解析层即打通
若你的路由器不支持泛域名解析,临时方案是在每台需要访问的设备上修改hosts文件,手动将每个子域名映射到树莓派IP,但这种方式扩展性差,后续新增应用需要逐台修改,不推荐长期使用。
第二步:按正确结构配置Nginx规则
不需要为每个应用单独拆分零散配置文件,树莓派上统一管理更易维护,按以下步骤操作:
- 清理冗余配置
- 删除
/etc/nginx/sites-enabled/下Nginx自带默认站点的软链接(这是配置不生效的最常见元凶,它会作为兜底接住所有未匹配的请求) - 删除之前测试时写的零散单应用配置,避免规则冲突
- 删除
- 新建统一配置文件
在/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; } } - 第一个块写主站
- 加载配置并校验
- 建立软链接让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
- 建立软链接让Nginx识别新配置:
第三步:分层验证配置连通性
按照从内到外的顺序排查,快速定位问题:
- 先在树莓派本地验证Nginx规则:执行
curl -H "Host: app1.home" http://127.0.0.1,如果能正常返回app1应用的页面,说明Nginx配置本身无问题 - 再在局域网其他设备上访问
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
相关产品推荐
相关产品推荐

