*.localhost.com
添加到我的/etc/hosts/
文件中?如果不可能,如何解决此问题?我需要在本地服务器上测试通配符子域。它是Django开发服务器,Django开发服务器可以处理子域吗?其他一些软件/路由可以给我我想要的最终结果吗?
#1 楼
我已经用Python编写了DNS代理。它将读取/ etc / hosts中的通配符条目。参见此处:https://github.com/hubdotcom/marlon-tools/blob/master/tools/dnsproxy/dnsproxy.py评论
太棒了!我一直在寻找一个像这样的简单解决方案(在OSX Mavericks BTW上工作)
–比利·穆恩(Billy Moon)
2013年11月5日在22:07
现在,如果我们只能点安装它:)
–metakermit
2014年3月25日上午11:39
我安装了此软件,完成了所有工作并运行了它,但它不会阻止网站。
–DisplayName
2015年12月13日18:47
无法对此进行足够的投票。我永远都需要这个,偶然发现了这个问题和答案的宝藏,而且我有点像Python黑客,这真是个奇趣。感谢分享!
–法雷
2016年9月8日15:41
#2 楼
安装dnsmasq(无论如何,我都会在所有Linux桌面上都将它作为DNS缓存来执行)。在dnsmasq.conf
中添加以下行:address=/localhost.com/127.0.0.1
评论
辉煌!对于Mac用户请注意,它确实很简单:1. sudo端口安装dnsmasq 2.编辑/opt/local/etc/dnsmasq.conf 3. sudo端口加载dnsmasq
–tomc
11年11月16日在11:57
带有brew的OSX:与上述相同,但是brew安装dnsmasq
–马特·汉弗莱(Matt Humphrey)
13年3月7日在21:41
fyi brew> port(re @MattHumphrey建议)
– Electricblake
13年3月22日在2:57
这个示例对我不起作用,可能是因为我正在使用vagrantup.com进行本地服务。不用担心,我已经将IP更改为正确的IP 192.168.50.11,但是DNS无法解析。任何想法,此示例是否适用于“非127.0.0.1” IP?
–布赖恩
13-10-27在19:55
大提示。对于Ubuntu 14.04桌面(默认情况下运行dnsmasq),创建一个名为/etc/NetworkManager/dnsmasq.d/dnsmasq-localhost.conf的文件,并将行地址= / localhost.com / 127.0.0.1放入其中,然后重新启动。
–user38397
15年5月21日在18:48
#3 楼
在/etc/hosts
文件中不能指定通配符。明确指定所需的主机名,或者使用适当的规则设置本地名称服务器。 #4 楼
您需要设置一个DNS服务器,并让每个客户端使用它进行解析。服务器本身可以像dnsmasq一样“轻”,也可以像BIND一样重。评论
dnsmasq的+1,它确实有据可查,易于使用
–David Schmitt
2011年5月2日,12:24
dnsmasq无法执行此操作。
–DisplayName
15年12月13日在18:51
dnsmasq.conf手册页的--address =部分中描述的行为的哪一部分没有涵盖上述用例?
–通用梳子
15年12月14日在16:33
#5 楼
简单的工作流程(无需安装任何东西)我个人喜欢为此创建一个PAC文件并使浏览器使用它。
步骤1:创建一个文件,例如:
*.proxy.pac*
在某处(我使用我的$home
文件夹)步骤2:粘贴此代码(示例使用端口8000):
function FindProxyForURL(url, host) {
if (shExpMatch(host, "*localhost")) {
return "PROXY localhost:8000";
}
return "DIRECT";
}
步骤3:
让浏览器使用此PAC文件。
用于PAC和Firefox的Youtube视频
步骤4:
现在您可以通过以下方式测试您的应用了访问:
http://mysubdomain.localhost/
第5步:尽情享受:)
评论
也许值得一提的是,这只会影响您的浏览器。其他程序(如wget,将不受此影响)。这本身不是问题,但是也许最好提一下。
–威廉·范·昂森(Willem Van Onsem)
18年4月24日在21:02
如果您使用.pac路由,并且正在实现node.js服务器,您会惊讶地发现req.url现在是绝对URL。这样做是因为假设您要编写一个实际的代理服务器,但是如果您使用此技术只是为了停止添加/ etc / hosts条目以进行调试,那么这是令人惊讶的。仅供参考,以便那些可能走与我一样的人。
–汤姆·布特尔(Tom Boutell)
19年1月2日在20:26
#6 楼
我整理了我的一个旧项目:https://github.com/airtonix/avahi-aliases
要求:
可安装avahi和python-avahi的Linux
.local域可以使用(avahi不支持任何其他类型)
使用dnsmasq或python的优势dns代理:
本地网络上的其他avahi / bonjour用户可以解析您创建的别名并向网络宣告(前提是您允许访问端口5353)
#7 楼
您不能在/etc/hosts
中使用通配符。 这里有一个很好的演练,介绍了如何使用内置但未激活的DNS服务器BIND和Apache在OS X上完成操作。
评论
Apache与子域无关。
–匿名
10 Mar 2 '10 at 17:55
#8 楼
在我的情况下,此基于DNS的解决方案运行完美,无需安装任何东西:https://gist.github.com/fedir/04e60d679d5657d1f9f9aa10b3168282(Mac OSX 10.9)评论
Mac OSX如此出色的解决方案。
– iDev247
2012年9月6日下午7:25
无效链接,请更新您的链接,解决方案,或以某种方式弃用此答案。干杯。
–埃里克·霍登斯基(Eric Hodonsky)
17年5月12日在17:07
完成(已添加备份)
– Fedir RYKHTIK
17年5月18日在12:50
#9 楼
如果要与dnsmasq
一起使用NetworkManager
,则可以(甚至必须?)通过将dns=dnsmasq
添加到
dnsmasq
中来从NetworkManager
启动/etc/NetworkManager/NetworkManager.conf
。然后dnsmasq配置进入/etc/NetworkManager/dnsmasq.conf
或/etc/NetworkManager/dnsmasq.d/
响应。#10 楼
简短的答案:您的/ etc / hosts /文件不会让您使用通配符或端口号。您将需要为每个子域创建一个条目
评论
什么让您指定端口号?不是DNS AFAIK。
–ptman
10 Mar 3 '10在11:45
#11 楼
简短的答案是你不知道。更长的答案是您需要更清楚地了解实际想要实现的目标,因为也许有更好的方法,也有实现它的不同方法。对于虚拟主机(我已经DNS结合虚拟主机托管的Web服务器在DNS中完成)。有关通配符DNS记录的更多信息(Wikipedia),以及有关使用Apache和Bind for Linux使用bind和Apache进行通配符托管的文章。
最糟糕的情况是,您可以使用本地DNS服务器。
#12 楼
此主题的常见任务是将目录映射到子域。一种非常简单的方法是将基于目录的条目自动附加到主机文件:#!/usr/bin/python import os hostsFile = open("/etc/hosts", "a+"); lines = hostsFile.readlines() for fileName in os.listdir('/opt/subdomainDirs'): entryExists = False for line in lines: if fileName in line: entryExists = True if not entryExists: hostsFile.write("127.0.0.1 " + fileName + ".localhost\n");
#13 楼
谢谢tschundeee,我认为这是对此问题的最终答案,希望我能发表评论,但这是那些尝试实现原始目标的人员的完整配置(通配符都指向相同的代码库-无需安装,开发环境即,XAMPP)主机文件(添加条目)
文件:/ etc / hosts(非Windows)
127.0.0.1 example.local
httpd.conf配置(启用虚拟主机)
文件:/XAMPP/etc/httpd.conf
# Virtual hosts
Include etc/extra/httpd-vhosts.conf
httpd-vhosts .conf配置
文件:XAMPP / etc / extra / httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin admin@example.local
DocumentRoot "/path_to_XAMPP/htdocs"
ServerName example.local
ServerAlias *.example.local
# SetEnv APP_ENVIRONMENT development
# ErrorLog "logs/example.local-error_log"
# CustomLog "logs/example.local-access_log" common
</VirtualHost>
重启apache
创建pac文件:
保存为any.pac,然后将其保存到浏览器的网络中>代理>自动配置设置(如果您对此进行更改,则重新加载)
function FindProxyForURL(url, host) {
if (shExpMatch(host, "*example.local")) {
return "PROXY example.local";
}
return "DIRECT";
}
#14 楼
dnsmasq为我工作,除了我不得不执行一些其他步骤。这是完整的过程:
用以下行添加
/etc/resolv.conf
nameserver 127.0.0.1
将以下行添加到
/etc/dnsmasq.conf
listen-address=127.0.0.1
address=/localhost.localdomain/127.0.0.1
address=/localhost/127.0.0.1
重新启动dnsmasq(不要简单地告诉dnsmasq重新加载配置文件)
评论
如果您的发行版使用netplan,则此功能将无效(ubuntu 18.04我在看着您)
– MrMesees
19年2月26日在5:15
真伤心刚刚发现netplan于2016年7月首次发布。我确信他们的做法是“更好”的。
– jbangerter
8月25日0:44
#15 楼
从此博客复制此处是在Mac上的操作方法:https://hedichaibi.com/how-to-setup-wildcard-dev-domains-with-dnsmasq-on-a-mac/
~ brew install dnsmasq
~ vim /usr/local/etc/dnsmasq.conf
# This file will be added to the configuration
conf-file=/Users/your_user_name/.dnsmasq/dnsmasq.conf
~ vim /Users/your_user_name/.dnsmasq/dnsmasq.conf
# example.localhost will be resolved as 127.0.0.1, including subdomains
address=/example.localhost/127.0.0.1
listen-address=127.0.0.1
~ sudo brew services stop dnsmasq
~ sudo brew services start dnsmasq
我们需要告诉macOS使用127.0.0.1作为第一个DNS解析器。
评论
属于超级用户吗?我知道有人说不可能!但是,无论如何我该怎么做!我可以使用/ etc / hosts /之外的东西来获得效果。我正在测试开发服务器。
在超级用户上:unix.stackexchange.com/questions/3352/…
由于大多数答案都集中在您的第一个问题(本地主机子域通配符)上,因此我将以评论的形式回答您的第二个问题:是的,Django开发服务器完全能够处理本地主机子域,您只需说服浏览器和操作系统即可发送流量(使用以下各种解决方案之一)!