【发布时间】:2012-03-29 17:59:04
【问题描述】:
我目前正在做一个项目,我想在家中的两台笔记本电脑上对其进行测试,其中一台笔记本电脑连接到另一台的本地主机。我正在使用 XAMPP。我该怎么做?
【问题讨论】:
标签: localhost
我目前正在做一个项目,我想在家中的两台笔记本电脑上对其进行测试,其中一台笔记本电脑连接到另一台的本地主机。我正在使用 XAMPP。我该怎么做?
【问题讨论】:
标签: localhost
这绝对是可能的。我们将在此处以 Apache 为例。
假设您是 Symfony2 的忠实粉丝,并且您想从 4 台不同的计算机(托管您网站的主要计算机,以及连接的 Mac、Windows 和 Linux 发行版)访问您的 symfony 网站http://symfony.local/ (无线或非无线)到主计算机。
1 设置虚拟主机:
您首先需要在您的 apache httpd-vhosts.conf 文件中设置一个虚拟主机。在 XAMP 上,您可以在此处找到此文件:C:\xampp\apache\conf\extra\httpd-vhosts.conf。在 MAMP 上,您可以在此处找到此文件:Applications/MAMP/conf/apache/extra/httpd-vhosts.conf。 This step 准备您计算机上的 Web 服务器以处理 symfony.local 请求。您需要提供虚拟主机的名称以及您网站的根/主文件夹。为此,请在该文件的末尾添加以下行。您需要将DocumentRoot 更改为您的主文件夹所在的位置。这里我把/Applications/MAMP/htdocs/Symfony/作为我网站的根。
<VirtualHost *:80>
DocumentRoot "/Applications/MAMP/htdocs/Symfony/"
ServerName symfony.local
</VirtualHost>
2 配置您的主机文件:
为了让客户端(在这种情况下是您的浏览器)理解symfony.local 的真正含义,您需要在您的计算机上编辑主机文件。每次您在浏览器中键入 URL 时,您的计算机都会尝试理解它的含义! symfony.local 对计算机没有任何意义。因此它会尝试将名称symfony.local 解析为IP 地址。它将首先查看您计算机上的主机文件,以查看他是否可以将 IP 地址与您在地址栏中键入的内容相匹配。如果不能,它会询问 DNS 服务器。这里的技巧是将以下内容附加到您的主机文件中。
/private/etc/hosts; /etc/hosts; \Windows\system32\private\etc\hosts;\Windows\system32\drivers\etc\hosts;\Windows\system32\drivers\etc\hosts;主机文件
##
# Host Database
# localhost is used to configure the loopback interface
##
#...
127.0.0.1 symfony.local
从现在开始,每次你在这台电脑上输入 symfony.local,你的电脑都会使用 loopback 接口连接到 symfony.local。它会明白你想在 localhost (127.0.0.1) 上工作。
3 从另一台计算机访问symfony.local:
我们终于解决了您的主要问题:
我现在如何通过其他计算机访问我的网站?
现在这很容易!我们只需要告诉其他计算机他们如何找到symfony.local!我们如何做到这一点?
3a 获取托管网站的计算机的IP地址:
我们首先需要知道托管网站的计算机上的 IP 地址(我们从一开始就一直在研究的那个)。在终端中,在 MAC 和 LINUX 上键入 ifconfig |grep inet,在 WINDOWS 上键入 ipconfig。假设这台计算机的 IP 地址是 192.168.1.5。
3b 在您尝试访问网站的计算机上编辑 hosts 文件。:
同样,在 MAC 上,此文件位于 /private/etc/hosts;在 LINUX 上,/etc/hosts;在 WINDOWS 中,\Windows\system32\private\etc\hosts(如果您使用 WINDOWS 7,此文件位于 @ 987654362@).. 现在的诀窍是使用我们尝试访问/与之交谈的计算机的 IP 地址:
##
# Host Database
# localhost is used to configure the loopback interface
##
#...
192.168.1.5 symfony.local
4 终于在您的浏览器中享受结果
您现在可以进入浏览器并输入http://symfony.local 以在不同的计算机上精美地查看您的网站!请注意,如果您是 OSX 用户,则可以应用相同的策略通过 Virtual Box 在 Internet Explorer 上测试您的网站(如果您不想使用 Windows 计算机)。这在Crafting Your Windows / IE Test Environment on OSX 中有很好的解释。
您可能想知道如何从移动设备访问您的本地主机网站。在某些情况下,您将无法修改您设备上的主机文件(iPhone、iPad...)(越狱除外)。
那么,解决方案是在托管网站的机器上安装代理服务器,并从您的 iphone 连接到该代理。它实际上在以下帖子中得到了很好的解释,并且设置时间不长:
在 Mac 上,我建议:Testing a Mac OS X web site using a local hostname on a mobile device:使用SquidMan 作为代理。这是一个 100% 免费的解决方案。有些人还可以使用Charles作为代理服务器,但它是50美元。
在 Linux 上,您可以通过使用Squid 作为代理服务器来适应上述 Mac OS 方式。
在 Windows 上,您可以使用 Fiddler 执行此操作。该解决方案在以下帖子中进行了描述:Monitoring iPhone traffic with Fiddler
@Dre。从另一台计算机访问网站的任何可能方式 手动编辑主机文件?假设我想要 100 台电脑 访问网站
这是一个有趣的问题,因为它与 OP 问题有关,让我帮忙。
您必须对网络进行更改,以便每台机器都知道您的网站托管在哪里。 Most everyday routers don't do that 所以你必须在你的网络上运行你自己的 DNS 服务器。
假设您有一个路由器 (192.168.1.1)。该路由器有一个 DHCP 服务器,并为网络上的 100 台机器分配 IP 地址。
现在,假设您在同一个网络上拥有一台位于192.168.1.5 的机器,上面有您的网站。我们将调用该机器 pompei。
$ echo $HOSTNAME
pompei
和以前一样,192.168.1.5 的那台机器 pompei 运行一个 HTTP 服务器,它为您的网站 symfony.local 提供服务。
为了让每台机器都知道symfony.local 托管在pompei 上,我们现在需要网络上的自定义DNS 服务器,它知道symfony.local 的托管位置。然后,网络上的设备将能够在内部解析 pompei 提供的域名。
第 1 步:DNS 服务器
在您的网络上设置 DNS 服务器。为了方便起见,让我们将它放在 pompei 上,并使用类似 dnsmasq 的东西。
Dnsmasq 提供域名系统 (DNS) 转发器,...。
我们希望 pompei 运行 DNSmasq 来处理 DNS 请求 Hey, pompei, where is symfony.local 并响应 Hey, sure think, it is on 192.168.1.5 but don't take my word for it。
继续安装 dnsmasq,dnsmasq 配置文件通常位于/etc/dnsmasq.conf,具体取决于您的环境。
我个人使用no-resolv 和谷歌服务器server=8.8.8.8 server=8.8.8.4。
*注意:* 如果修改 /etc/hosts 文件,请务必重新启动 DNSmasq,否则任何更改都不会生效。
第 2 步:防火墙
为了工作,pompei 需要允许传入和传出“域”数据包,这些数据包从端口 53 进出。当然!这些是 DNS 数据包,如果 pompei 不允许它们,则根本无法访问您的 DNS 服务器。继续打开 53 端口。在 linux 上,您通常会使用 iptables。
分享我的想法,但您很可能需要深入了解防火墙并充分了解所有内容。
#
# Allow outbound DNS port 53
#
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
第 3 步:路由器
告诉你的路由器你的 dns 服务器现在在192.168.1.5 上。大多数情况下,您只需登录路由器并非常轻松地手动更改。
就是这样,当您在机器上请求 symfony.local 时,它会询问您的 DNS 服务器,symfony.local 托管在哪里,并在收到来自DNS 服务器,然后将正确的 HTTP 请求 发送到 192.168.1.5 上的 pompei。
我让你玩这个并享受旅程。这两个步骤是主要指导方针,因此如果这是您第一次这样做,您将不得不调试并花费几个小时。假设这是一个更高级的网络,有主 DNS 服务器,辅助 DNS 服务器,etc.。祝你好运!
【讨论】:
host 文件从另一台计算机访问网站?假设我有 100 台计算机想要访问该网站
要在同一无线网络和互联网上的两台笔记本电脑上进行测试,您可以使用 http://localhost.run/ 或 https://ngrok.com/ 等服务
【讨论】:
假设两台机器在同一个工作组中,在你要连接的机器上打开cmd.exe,输入ipconfig,并在IPv4 Address行记下IP。
然后,在你要连接的机器上,使用
http://{the IP of the target machine}:{port number}
例如 http://192.168.0.1:80 如果您的网站在端口 80 上运行。
应该可以的。
【讨论】:
在 Mac OS X 上:
在终端中,运行ifconfig | grep 192. 以获取您机器在当前网络上的内部 IP。可能类似于192.168.1.140
启动服务器。例如,node server.js 可能会在某个端口上启动服务器。
在您的手机上,访问192.168.1.140:3000 或您的服务器正在运行的任何端口。
【讨论】:
这个工具为我节省了很多,因为我在我的机器上没有管理员权限并且已经安装了 nodejs。由于某种原因,我网络上的配置无法让我访问其他机器,只需将 IP 指向浏览器。
# Using a local.dev vhost
$ browser-sync start --proxy
# Using a local.dev vhost with PORT
$ browser-sync start --proxy local.dev:8001
# Using a localhost address
$ browser-sync start --proxy localhost:8001
# Using a localhost address in a sub-dir
$ browser-sync start --proxy localhost:8080/site1
【讨论】:
browser-sync start --proxy localhost:3000。在连接到网络的另一台设备上,我键入:${computerIP}:3000,但我什么也看不到。我想我应该提供更多的东西。
可能是您的防火墙阻止您访问本地主机的网络服务器。
如果需要,请将您的两台计算机的 Internet Security 防病毒网络安全的 IP 地址设置为安全 IP 地址。
如何查找 Windows PC 的 IP 地址:开始 >(运行)输入:cmd(回车)
(这会打开黑盒命令提示符)
输入 ipconfig (Enter)
假设您的 Apache 或 IIS 网络服务器安装在您的 PC 上:192.168.0.3
你想用你的笔记本电脑访问你的网络服务器。 (笔记本电脑的 IP 是 192.168.0.5)
在您的 PC 上,您在 Firefox 或 Internet Eplorer 浏览器中输入:http://localhost/ 以访问您的网络服务器上的数据。
在您的笔记本电脑上输入 http://192.168.0.3/ 以访问您 PC 上的网络服务器。
要使所有这些功能正常工作,您需要正确安装网络服务器(例如 IIS、Apache、XAMP、WAMP 等)。
如果它不起作用,请尝试从您的笔记本电脑 ping 您的 PC:
在笔记本电脑上打开命令 propmt:开始 > cmd (Enter)
ping 192.168.1.3(回车)
如果 ping 失败,则说明防火墙阻止了您的连接,或者您的网络布线出现故障。重新启动调制解调器或网络交换机和机器。
关闭正在使用您的端口的聊天程序等程序。
您还可以尝试不同的端口号:
http:192.168.0.3:80 或 http:192.168.0.3:81 或末尾的任何随机数
【讨论】:
如果在完成上述步骤后仍然无法从其他设备访问本地主机,这是一个旁注。这可能是由于 apache ports.conf 已配置为在本地 (127.0.0.1) 而非外部提供服务。
检查以下内容,(对于 ubuntu apache2)
$ cat /etc/apache2/ports.conf
如果设置了以下,
NameVirtualHost *:80
Listen 127.0.0.1:80
然后改回默认值
NameVirtualHost *:80
Listen 80
【讨论】:
如果您使用的是 Windows,请使用 ipconfig 获取本地 IPv4 地址,然后在您的 Apache 配置文件下指定:httpd.conf,例如: p>
Listen: 10.20.30.40:80
重新启动您的 Apache 服务器并在网络上的其他计算机上对其进行测试。
【讨论】: