我在我的 Mac 上运行本地 Apache 进行开发,同时还在 上运行 node.js 服务器http://127.0.0.1:8000/
。
我使用.dev
域名进行 Apache 项目,并希望.node
域名重定向到 node.js 服务器。我已设置虚拟主机,如下所示:
<VirtualHost *.dev:80>
VirtualDocumentRoot "/www/sites/%1/wwwroot"
ServerName sites.dev
ServerAlias *.dev
UseCanonicalName Off
</VirtualHost>
<VirtualHost *.node:80>
ServerName sites.node
ProxyPass "/" "http://localhost:8000"
ProxyPassReverse "/" "http://localhost:8000"
</VirtualHost>
但是,当我尝试应用这些设置时,出现错误:
[core:error] [pid 8594] (EAI 8)nodename nor servname provided, or not known:
AH00547: Could not resolve host name *.node -- ignoring!
我应该注意到.dev
域按预期工作,并且可以在 访问 node.js 服务器http://localhost:8000/
,但不能在 访问http://test.node/
。
我这里遗漏了什么吗?
答案1
<VirtualHost *.dev:80>
VirtualDocumentRoot "/www/sites/%1/wwwroot"
ServerName sites.dev
ServerAlias *.dev
UseCanonicalName Off
</VirtualHost>
<VirtualHost *.node:80>
ServerName sites.node
ProxyRequests on
RewriteEngine on
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass "/" "http://localhost:8000"
ProxyPassReverse "/" "http://localhost:8000"
</VirtualHost>
这是如何运作的?
答案2
我解决了自己的问题,这里就是错误的地方:
- 我应该确保自定义域确实解析为
localhost
。
对于 Mac 上的自制 dnsmasq,这可以解决问题:
echo 'address=/.no/127.0.0.1' > $(brew --prefix)/etc/dnsmasq.conf
然后 OS X 应该被告知在本地查找自定义域:
sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/no'
- 代理重定向的 VirtualHost 规则应尽快出现在配置文件中。否则,Apache 可能会将您的自定义域请求重定向到 ,
localhost
而不附加自定义端口:8000
。
像这样:
<VirtualHost *.no:80>
ServerName sites.no
ProxyPreserveHost On
ProxyPass "/" "http://localhost:8000/"
ProxyPassReverse "/" "http://localhost:8000/"
</VirtualHost>
<VirtualHost *.dev:80>
VirtualDocumentRoot "/www/sites/%1/wwwroot"
ServerName sites.dev
ServerAlias *.dev
UseCanonicalName Off
</VirtualHost>
- 自定义域名
.node
目前不是有效的顶级域名,根据 IANA。将其更改为有效内容(例如.no
),可防止 Safari 在收到诸如 之类的请求时启动 Google 搜索test.no
。(不过,请与.no
那里的真实网站说再见。)
就是这样。