在本地开发环境中尝试使用 dnsmasq 设置通配符子域时无法提供虚拟主机服务

在本地开发环境中尝试使用 dnsmasq 设置通配符子域时无法提供虚拟主机服务

我正在尝试使用 dnsmasq 在笔记本电脑上启用通配符 DNS。我意识到这已经已回答我多次在这个论坛上询问过我,但是我却无法找到适合我的解决方案。

迄今采取的措施:

  • 安装 dnsmasq
  • address=/example.dev/127.0.0.1在 dnsmasq.conf 中设置
  • listen-address=127.0.0.1在 dnsmasq.conf 中设置
  • 确保nameserver 127.0.0.1在 /etc/resolv.conf 中
  • prepend domain-name-servers 127.0.0.1;在 /etc/dhcp3/dhclient.conf 中设置
  • 为 example.dev 创建了一个 vhost
  • 重新启动 apache 和 dnsmasq

注意:example.dev 未在 /etc/hosts 中设置

我的 vhost 例如.dev

<VirtualHost *:80>
        ServerName example.dev
        DocumentRoot /home/jkendall/public_html/example/public
        ServerAlias *.example.dev

        # This should be omitted in the production environment
        SetEnv APPLICATION_ENV development

        <Directory /home/jkendall/public_html/example/public>
                DirectoryIndex index.php
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

上述设置将在本地为 example.dev 提供服务,不会出现任何问题。它还将为 test.example.dev 提供服务,但 test.example.dev 从 /var/www 返回默认的 apache“It works!”index.html,而不是 /home/jkendall/public_html/example/public 中的 index.php。

解决方案服务器故障线程表明

address=/.example.dev/127.0.0.1

可以解决我的问题,但是当我尝试使用该解决方案时,重新启动 dnsmasq 会导致失败并显示错误消息

dnsmasq: error at line 62 of /etc/dnsmasq.conf

为了好玩,我将项目移至 /var/www/example 并适当修改了 vhost。我得到了与上述相同的结果。

目前我不确定我还能采取什么其他措施来解决此问题。您有什么想法吗?

答案1

看来我对 dnsmasq、vhosts 和 dns 存在根本性的误解。dnsmasq 所做的正是它应该做的事情,将 example.dev 的请求路由到 127.0.0.1。虽然我确实设置了 vhosts,并且设置正确,但没有本地 DNS 服务器来响应并将这些请求定向到正确的位置。

最终解决我的问题的是安装bind9,为 example.dev 创建一个区域,然后为通配符子域添加一条 A 记录。

以下是详细信息:

  • 通过 Synaptic 包管理器安装 bind9
  • 添加了区域named.conf.local
  • 复制/etc/bind/db.local/etc/bind/example.dev
  • 根据我的需要适当地编辑新的区域文件。
  • 已测试
  • 跳起胜利之舞

这是我的named.conf.local

zone "example.dev" {
    type master;
    file "/etc/bind/example.dev";
};

这是我的db.example.dev

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                       201005173       ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1
example.dev     IN      A       127.0.0.1
*       IN      A       127.0.0.1
@       IN      AAAA    ::1

我不会提供胜利之舞的例子。

答案2

我的设置与你在问题中描述的完全相同,但有一点不同:在我的 Apache vhost 中Listen 80设置NameVirtualHost *:80。这应该将 Apache 连接到端口 80 - 你的浏览器正在监听该端口,这可能是你的初始设置所缺少的部分。

如果你可以恢复初始设置(是的,我知道,那是半年前的事了),你还需要通过调用dig example.dev | grep SERVER(应该返回;; SERVER: 127.0.0.1#53(127.0.0.1).

相关内容