对不同的 .local 域名使用不同的 nginx 服务器

对不同的 .local 域名使用不同的 nginx 服务器

.local我正在尝试在 RPi 上的不同域上运行不同的服务器。这是我的 nginx default.conf

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;
    server_name raspberrypi.local;
}

/etc/hosts文件 -

127.0.0.1   localhost
::1     localhost ip6-localhost ip6-loopback
ff02::1     ip6-allnodes
ff02::2     ip6-allrouters

127.0.1.1       raspberrypi

现在avahi-publish我使用另一个域名的别名

avahi-publish -a -R foo.local 192.168.68.120

但是当我访问此域时,它还会显示 nginx 默认 html,这是我不想要的。我知道我还没有配置在该域上运行的任何其他服务器,但我预计它会给出无法连接或无法访问的提示。

如果不可能的话,有没有办法拥有多个.local不是别名的域名?

答案1

但是当我访问此域时,它还会显示 nginx 默认 html,这是我不想要的。我知道我还没有配置在该域上运行的任何其他服务器,但我预计它会给出无法连接或无法访问的提示。

你不会得到“无法连接”的信息,因为你已经将 Nginx 配置为监听全部此服务器的地址 – 这就是listen *:80这里的意思;如果它正在监听0.0.0.0aka,*那么它将接受与任何本地 IPv4 地址的连接。([::]对于 IPv6 也是如此。)

(该server_name选项不会影响这一点——它所做的只是根据收到的请求中的 HTTP“Host”标头选择正确的服务器{}块,连接已建立。换句话说,它实现了基于名称的虚拟主机,而不是基于 IP 的虚拟主机。

如果您希望虚拟主机基于 IP,请更改您的 server{} 块以监听特定的 IP 地址而不是通配符地址:

server {
    listen 192.168.68.xxx:80;
}

请记住,如果 Nginx 在将地址分配给接口之前启动,此操作将失败。(可以使用以下方法避免这种情况IP 自由绑定但似乎 Nginx 还不支持这一点。)

相关内容