【问题标题】:How do I connect to this localhost from another computer on the same network?如何从同一网络上的另一台计算机连接到此 localhost?
【发布时间】:2012-03-29 17:59:04
【问题描述】:

我目前正在做一个项目,我想在家中的两台笔记本电脑上对其进行测试,其中一台笔记本电脑连接到另一台的本地主机。我正在使用 XAMPP。我该怎么做?

【问题讨论】:

    标签: localhost


    【解决方案1】:

    这绝对是可能的。我们将在此处以 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.confThis 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 服务器。这里的技巧是将以下内容附加到您的主机文件中。

    • MAC 上,此文件位于 /private/etc/hosts
    • LINUX 上,此文件位于 /etc/hosts
    • WINDOWS 上,此文件位于 \Windows\system32\private\etc\hosts
    • WINDOWS 7 上,此文件位于 \Windows\system32\drivers\etc\hosts
    • WINDOWS 10 上,此文件位于 \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 地址(我们从一开始就一直在研究的那个)。在终端中,在 MACLINUX 上键入 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


    23/11/2017 编辑:嘿,我不想修改我的 Hosts 文件

    @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 提供的域名。

    3 个简单的步骤。

    第 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.。祝你好运!

    【讨论】:

    • 很好的回复。我跟着最后一部分,直到我得到“使用 Fiddler 监控 iPhone 流量”。它指向 Fiddler 主页。这应该是链接:conceptdev.blogspot.com/2009/01/…
    • 我已经修改了主机文件,但问题是我也有 IIS 服务器正在运行,所以我的“localhost”或“127.0.0.1”指向 IIS 服务器,如何用 xamp 服务器替换它?跨度>
    • @Mick 是否可以通过不手动编辑host 文件从另一台计算机访问网站?假设我有 100 台计算机想要访问该网站
    • @Dre 是的,您必须对网络进行更改,以便每台机器都知道您的网站托管在哪里。我在答案的末尾添加了信息。希望对您有所帮助。
    • 很好的解释!
    【解决方案2】:

    要在同一无线网络和互联网上的两台笔记本电脑上进行测试,您可以使用 http://localhost.run/https://ngrok.com/ 等服务

    【讨论】:

    • localhost.run 就像魅力一样。我的服务器在 8000 端口上运行,只是将命令行从 80 更改为 8000。
    • 哇!太棒了......它真的在单次运行......谢谢@tommyvn
    • 设置 NGROK 比更新本地主机文件更容易。 +1
    • 快速测试的简单解决方案
    • 如何使用localhost.run?
    【解决方案3】:

    假设两台机器在同一个工作组中,在你要连接的机器上打开cmd.exe,输入ipconfig,并在IPv4 Address行记下IP。

    然后,在你要连接的机器上,使用

    http://{the IP of the target machine}:{port number}
    

    例如 http://192.168.0.1:80 如果您的网站在端口 80 上运行。

    应该可以的。

    【讨论】:

    • 如果端口 80 是应用程序的端口(通常是),这将起作用,但请记住,我们可以使用不同的端口。这意味着 http:// + 目标机器的 IP + ":PORT_NUMBER"
    • 这是我正在寻找的简单解决方案。 @Codrin Eugeniu:请考虑将建议“:PORT_NUMBER”纳入您的答案,如ggderas所述。对我来说,这是需要的,因为我使用 Apache Superset 通过端口 8088 进行连接。
    【解决方案4】:

    在 Mac OS X 上:

    1. 在终端中,运行ifconfig | grep 192. 以获取您机器在当前网络上的内部 IP。可能类似于192.168.1.140

    2. 启动服务器。例如,node server.js 可能会在某个端口上启动服务器。

    3. 在您的手机上,访问192.168.1.140:3000 或您的服务器正在运行的任何端口。

    【讨论】:

    • 既好又简单,以防万一您有多个 IP 地址。选择一个以 inet 192 开头的。
    【解决方案5】:

    这个工具为我节省了很多,因为我在我的机器上没有管理员权限并且已经安装了 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
    

    http://www.browsersync.io/docs/command-line/

    【讨论】:

    • 我在 localhost:3000 上运行一个 webapp。我在单独的外壳中使用了browser-sync start --proxy localhost:3000。在连接到网络的另一台设备上,我键入:${computerIP}:3000,但我什么也看不到。我想我应该提供更多的东西。
    【解决方案6】:

    可能是您的防火墙阻止您访问本地主机的网络服务器。
    如果需要,请将您的两台计算机的 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 或末尾的任何随机数

    【讨论】:

    • 谢谢@KarlosFontana - 你也回答了我的问题。我无法将我的 iPhone 连接到我在桌面上编写的服务器。 iPhone 已连接到我的 PC 的 WiFi。你的最后一行回答了我的问题:-)
    【解决方案7】:

    如果在完成上述步骤后仍然无法从其他设备访问本地主机,这是一个旁注。这可能是由于 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  
    

    【讨论】:

      【解决方案8】:

      如果您使用的是 Windows,请使用 ipconfig 获取本地 IPv4 地址,然后在您的 Apache 配置文件下指定:httpd.conf,例如: p>

      Listen: 10.20.30.40:80
      

      重新启动您的 Apache 服务器并在网络上的其他计算机上对其进行测试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-01
        • 2015-03-13
        • 2013-01-16
        • 2016-09-19
        • 1970-01-01
        • 2020-03-20
        • 2023-04-02
        • 2020-11-28
        相关资源
        最近更新 更多