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

树莓派上为不同.local域名配置独立Nginx服务器的问题咨询

树莓派上为不同.local域名配置独立Nginx服务器的问题咨询

我来帮你梳理下问题原因和解决办法:

为什么访问foo.local会跳转到默认Nginx页面?

这是因为Nginx的default_server规则在起作用——当Nginx收到请求时,如果找不到和请求域名匹配的server_name配置块,就会自动用标记了default_server的那个server来处理请求。你用Avahi把foo.local指向了树莓派的IP,请求自然会落到Nginx上,而你又没给foo.local单独配置server块,所以就走了默认的raspberrypi.local对应的页面。

解决办法分两种场景:

场景1:让未配置的.local域名直接显示“无法访问”

你可以新增一个专门的server块,把它设为新的default_server,用来拦截所有未匹配的域名请求,直接断开连接或者返回404:

  1. 修改Nginx配置,先把原来的默认server块去掉default_server标记:
server {
    listen 80;
    listen [::]:80;
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
    server_name raspberrypi.local;
}
  1. 新增一个专门处理未匹配域名的server块:
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _; # 下划线表示匹配所有未明确配置的域名
    return 444; # 直接关闭连接,浏览器会显示“无法访问”
}
  1. 重启Nginx生效:sudo systemctl restart nginx
    之后再访问foo.local,浏览器就会提示无法连接了。

场景2:配置多个独立的.local域名(不是别名)

如果想给不同的.local域名配置不同的服务,按下面步骤来:

  1. 用Avahi发布多个.local域名的A记录(如果要长期生效,建议写成Avahi服务文件,避免每次重启手动执行):
    临时生效的命令:

    avahi-publish -a -R foo.local 192.168.68.120
    avahi-publish -a -R bar.local 192.168.68.120
    

    长期生效的话,比如给foo.local创建Avahi服务文件/etc/avahi/services/foo.local.service:

    <?xml version="1.0" standalone='no'?>
    <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
    <service-group>
      <name replace-wildcards="yes">foo</name>
      <service>
        <type>_http._tcp</type>
        <port>80</port>
        <host-name>raspberrypi</host-name>
        <address ipv4="192.168.68.120"></address>
      </service>
    </service-group>
    

    然后重启Avahi:sudo systemctl restart avahi-daemon

  2. 在Nginx里为每个域名配置独立的server块:

# raspberrypi.local 原服务
server {
    listen 80;
    listen [::]:80;
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
    server_name raspberrypi.local;
}

# foo.local 专属服务
server {
    listen 80;
    listen [::]:80;
    root /var/www/foo; # 存放foo域名的网站文件目录
    index index.html;
    server_name foo.local;
}

# bar.local 专属服务
server {
    listen 80;
    listen [::]:80;
    root /var/www/bar; # 存放bar域名的网站文件目录
    index index.html;
    server_name bar.local;
}

# 可选:拦截未配置的域名
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 444;
}
  1. 创建对应的网站目录并放入内容:
sudo mkdir -p /var/www/foo /var/www/bar
sudo echo "<h1>Hello from foo.local</h1>" > /var/www/foo/index.html
sudo echo "<h1>Hello from bar.local</h1>" > /var/www/bar/index.html
  1. 重启Nginx生效:sudo systemctl restart nginx
    这样每个.local域名就会指向各自独立的内容了。

备注:内容来源于stack exchange,提问作者Hello-World

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:03:16