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

问题描述:

我目前正在进行一个项目,我想在家里的两台笔记本电脑上测试一台笔记本电脑连接到另一台笔记本电脑的本地主机。我正在使用XAMPP。我该怎么做呢?如何从同一网络上的另一台计算机连接到本地主机?

这是绝对有可能。我们将在这里对Apache进行一般性的介绍。

比方说,你是一个大的Symfony2风扇和你想在http://symfony.local/从4级不同的计算机(主之一来访问你的symfony的网站托管你的网站,以及一个苹果,在Windows和Linux发行版连接(无线或没有)到主计算机。

一般素描:

enter image description here


建立一个虚拟主机

您首先需要建立一个虚拟主机在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> 

配置您的主机文件

对于客户端(你在这种情况下,浏览器),以了解symfony.local的真正含义,你需要编辑的主机计算机上的文件。每当您在浏览器中输入网址时,您的电脑就会试图了解它的含义!对于电脑而言,symfony.local并不意味着什么。因此它会尝试将名称symfony.local解析为IP地址。它将通过首先查看计算机上的hosts文件来查看他是否可以将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;

Hosts文件

## 
# Host Database 
# localhost is used to configure the loopback interface 
## 
#... 
127.0.0.1   symfony.local 

从现在开始,每次你这台计算机上键入symfony.local,你的电脑将使用loopback接口连接到symfony.local。它会明白你想在本地主机上工作(127.0.0.1)。

访问symfony.local从其他计算机

我们终于到达您的主要问题是:

如何我现在可以通过其他计算机访问我的网站?

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

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

我们首先需要知道托管网站(我们一直在努力,因为在一个计算机上的IP地址非常开始)。在终端上,在MACLINUX类型ifconfig |grep inet,在WINDOWS类型ipconfig。我们假设这台电脑的IP地址是192.168.1.5

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

再次,MAC,该文件是在/private/etc/hosts; on LINUX,in /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 

最后享受你的浏览器中的结果

现在,您可以进入你的浏览器并输入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运行的HTTP服务器供应您的网站symfony.local

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

3个简单的步骤。

第1步:DNS服务器

设置您的网络上的DNS服务器。让我们在庞培为方便起见,并使用类似dnsmasq

的dnsmasq提供域名系统(DNS)转发...

我们希望庞贝运行的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数据包,如果庞培不允许他们,根本无法达到您的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,它会问哪里symfony.local托管您DNS服务器,并尽快,因为它已收到其答复从DNS服务器,然后将发送正确的HTTP请求庞培192.168.1.5

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

+0

很好的答复。我跟着最后一部分,直到我“用提琴手监控iPhone流量”。它指向Fiddler主页。这应该是链接:http://conceptdev.blogspot.com/2009/01/monitoring-iphone-web-traffic-with.html – helpse 2013-09-14 23:53:48

+0

非常感谢@隐藏!我已经用你的链接更新了答案。干杯!!! – Mick 2013-09-15 06:21:03

+0

我修改了主机文件,但问题是我也有IIS服务器运行,所以我的“本地主机”或“127.0.0.1”指向IIS服务器如何将其替换为xamp服务器? – 2015-03-21 19:24:15

如果两台机器都在同一个工作组中,请在要连接的机器上打开cmd.exe,输入ipconfig并注意IP在IPv4 Address行。

然后,在要连接的机器上,使用http:// + the IP of the target machine

这应该做到这一点。

它可能是您的防火墙阻止您访问本地主机的网络服务器。
如果需要,请将两台计算机的互联网安全防病毒网络安全的IP地址作为安全IP地址。
如何找到您的Windows PC的IP地址:开始>(运行)输入:CMD(回车)
(这将打开黑匣子命令提示符)
型IPCONFIG(回车)
比方说,你的Apache或IIS网络服务器安装在您的PC上:192.168.0.3
并且您想使用笔记本电脑访问您的网络服务器。 (笔记本电脑的IP为192.168.0.5)
在您的PC上键入:http:// localhost /在您的Firefox或Internet Eplorer浏览器中访问您的Web服务器上的数据。
在您的笔记本电脑上输入http://192.168.0.3/访问PC上的网络服务器。

对于所有这些工作,您需要正确安装Web服务器(例如IIS,Apache,XAMP,WAMP等)。

如果它不工作,尝试从你的笔记本电脑ping您的PC:
在笔记本电脑上打开命令propmt:开始> CMD(回车)
平192.168.1.3(回车)
如果ping命令失败,则防火墙阻止您的连接或您的网络布线出现故障。重新启动调制解调器或网络交换机和您的机器。
关闭程序,如正在使用您的端口的聊天程序。
您也可以尝试一个不同势端口号: HTTP:192.168.0.3:80或http:192.168.0.3:81或任何随机数在年底

+1

谢谢tou @KarlosFontana - 你刚刚回答了我的问题。我在将iPhone连接到我在桌面上编写的服务器时遇到问题。 iPhone连接到我的电脑的WiFi。你的最后一行回答了我的问题:-) – Tommy 2013-02-06 17:54:10

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

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

有关这两个笔记本电脑上测试相同的无线和互联网上,你可以使用服务像http://localhost.run/https://ngrok.com/

+0

localhost.run像魅力一样工作。我的服务器在端口8000上运行,只是将命令行从80更改为8000。 – Isuru 2017-04-23 16:51:46

在Mac OS X:

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

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

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