You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置NGINX在局域网通过多子域名访问多个应用?

问题原因

你的NGINX配置里的server_name都是xxx.localhost,但Windows电脑访问的是xxx.test.dev,请求的Host头和NGINX的任何server块都不匹配,因此NGINX会自动使用当前监听80端口下第一个加载的server块(按配置文件名的字母顺序),导致所有子域名请求都跳转到同一个服务。

解决方案

1. 修改NGINX的服务配置文件

将每个服务的server_name同时设置为本地localhost子域名和局域网test.dev子域名,确保两端请求都能匹配到对应的server块。以homarr为例,修改后的配置如下:

# /etc/nginx/sites-enabled/homarr.localhost.conf
server {
    listen 80;
    # 同时支持本地和局域网的子域名访问
    server_name homarr.localhost homarr.test.dev;
    location / {
        proxy_pass http://localhost:9000;
        # 补充代理头,避免应用因请求信息缺失出现异常
        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;
    }
}

对gitea和nextcloud的配置文件做同样修改:

  • gitea的server_name改为gitea.localhost gitea.test.dev,proxy_pass指向http://localhost:9002
  • nextcloud的server_name改为nextcloud.localhost nextcloud.test.dev,proxy_pass指向http://localhost:9001

2. 验证并重启NGINX

先检查配置文件语法是否正确:

sudo nginx -t

如果输出test is successful,则重启NGINX服务使配置生效:

sudo systemctl restart nginx

3. 确认Windows端Hosts配置生效

在Windows的命令行执行以下命令,验证子域名是否正确解析到服务器IP:

ping gitea.test.dev
ping homarr.test.dev
ping nextcloud.test.dev

若返回的IP是192.168.1.15,说明解析正常;若不是,检查Hosts文件是否保存,或执行ipconfig /flushdns刷新DNS缓存。

额外说明

添加proxy_set_header系列配置是为了让后端应用(尤其是NextCloud这类需要识别请求来源的服务)能正确获取客户端的真实信息,避免出现登录异常、资源加载失败等问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:11:06