localhost - 如何从同一网络上的另一台计算机连接到这个本地主机?

标签 localhost

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

最佳答案

那绝对有可能。我们将在这里采用 Apache 的一般情况。

假设您是 Symfony2 的忠实粉丝,并且想访问您的 symfony 网站 http://symfony.local/来自 4 台不同的计算机(主计算机托管您的网站,以及连接(无线或非无线)到主计算机的 Mac、Windows 和 Linux 发行版。

一般草图:

enter image description here

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 服务器 .这里的技巧是将以下内容附加到您的主机文件中。
  • 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接口(interface)连接到symfony.local。它会理解您想在本地主机 (127.0.0.1) 上工作。

    3 访问 symfony.local来自另一台计算机 :

    我们终于到了您的主要问题,即:

    How can I now access my website through an other computer?



    那么这现在很容易!我们只需要告诉其他计算机他们如何找到symfony.local !我们如何做到这一点?

    3a 获取托管网站的计算机的 IP 地址 :

    我们首先需要知道托管网站的计算机上的 IP 地址(我们从一开始就一直在研究这个地址)。在终端中,在 MAC LINUX 类型 ifconfig |grep inet , 在 WINDOWS类型 ipconfig .假设这台电脑的IP地址是 192.168.1.5 .

    3b 在您尝试访问网站的计算机上编辑主机文件。 :

    再次,在 MAC ,此文件在 /private/etc/hosts ;在 LINUX , 在 /etc/hosts ;并在 WINDOWS , 在 \Windows\system32\private\etc\hosts (如果您使用的是 WINDOWS 7 ,则此文件位于 \Windows\system32\drivers\etc\hosts 中)。现在的诀窍是使用我们尝试访问/与之对话的计算机的 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 中有很好的解释.

    您还可以从移动设备访问您的本地主机

    您可能想知道如何从移动设备访问您的 localhost 网站。在某些情况下,您将无法修改设备上的主机文件(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. Any possible way to access the website from another computer by not editing the host file manually? let's say I have 100 computers wanted to access the website



    这是一个有趣的问题,因为它与 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运行 HTTP 服务器 为您的网站提供服务 symfony.local .

    让每台机器都知道symfony.local托管在庞贝,我们现在需要一个自定义的网络上的 DNS 服务器,它知道在哪里 symfony.local托管。然后网络上的设备将能够在内部解析由庞培服务的域名。

    3个简单的步骤。

    第 1 步:DNS 服务器

    在您的网络上设置 DNS 服务器。为了方便起见,让我们把它放在庞贝上,并使用类似 dnsmasq 的东西.

    Dnsmasq provides Domain Name System (DNS) forwarder, ....



    我们希望 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 步:防火墙

    为了工作,庞贝需要允许传入和传出的“域”数据包,这些数据包进出端口 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 .

    我让你玩这个并享受骑行。这两个步骤是主要指导方针,因此如果这是您第一次进行调试,您将不得不进行调试并花费几个小时。假设这是一个更高级的网络,有主 DNS 服务器,辅助 DNS 服务器,etc. .祝你好运!

    关于localhost - 如何从同一网络上的另一台计算机连接到这个本地主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9682262/

    相关文章:

    windows - Windows 7 上的本地主机

    java - 如何让套接字仅接受来自本地主机的连接(在 Java 中)?

    mysql - 两个 Web 服务器之间的 phpMyAdmin 安装

    php - mysql_connect (localhost/127.0.0.1) 在 Windows 平台上运行缓慢

    mysql - Socket.io 无响应,Node.js

    javascript - 粘性导航栏在 jsfiddle 上工作,但在本地主机上不符合预期

    http - 通过 TCP/IP 堆栈的 localhost 请求

    localhost - 为什么 localhost 返回 "502 Bad Gateway"?

    mysql - 有没有办法镜像本地和在线的 MySQL 数据库?

    docker - 从Docker内部的加特林模拟连接到localhost