从android应用连接到本地后端

时间:2018-09-24 12:03:11

标签: android apache2 local httpd.conf

我有我的Laravel后端,我正尝试从android应用程序连接到该后端。我的主机文件有

   127.0.0.1    my.backend.test

我后端的httpd conf文件是

<VirtualHost *:80>
ServerName      my.backend.test
DocumentRoot    /var/www/mybackend.co.uk/code/public/
DirectoryIndex  index.php
RewriteEngine   On
ErrorLog        /var/www/mybackend.co.uk/code/storage/logs/apache_error.txt

Header set Access-Control-Allow-Origin "http://localhost:4200"

<Directory /var/www/mybackend.co.uk/code/public/>
    AllowOverride All
</Directory>

我可以通过Google ARC访问http://my.backend.test/api/some-route,但不能通过手机访问。我似乎必须使用我的本地IP地址,但我不知道如何设置它。

我尝试添加

<VirtualHost 192.168.my.ip:8080>
ServerName      my.mobilebackend.test
DocumentRoot    /var/www/mybackend.co.uk/code/public/
DirectoryIndex  index.php
RewriteEngine   On
ErrorLog        
/var/www/mybackend.co.uk/code/storage/logs/apache_error.txt

<Directory /var/www/mybackend.co.uk/code/public/>
     AllowOverride All
</Directory>

到httpd conf和

192.168.my.ip my.mobilebackend.test

主持人

3 个答案:

答案 0 :(得分:2)

如果我理解正确:您可以从同一网络上的另一台计算机访问服务器(因此这不是防火墙问题),但前提是您使用名称(添加在客户端的主机文件中)而不是IP地址。

您的配置是第一个虚拟主机吗? apache搜索与查询中提供的名称(例如URL)匹配的ServerName,然后回退到第一个(在您的情况下为ubuntu主页)。

作为测试,如果您使用

会发生什么
ServerName      192.168.0.1 (i.e. the IP used in the URL)

如果您通过IP地址访问服务器,但不再按名称访问服务器,我认为它会起作用

答案 1 :(得分:1)

尝试此方法

ip:port

示例

10.0.2.2:80

注意:防火墙可能会导致此问题。 Windows默认情况下启用了Microsoft Windows防火墙。您可能需要禁用它


IP地址

如果您使用的是仿真器:

10.0.2.2

如果您使用的是真实设备:

  1. 将它们连接到同一网络。在手机中使用WiFi连接或使用USB绑定选项。
  2. 在cmd中键入ipconfig(如果使用Windows)查找计算机的IP地址


端口

默认端口为80。如果已更改,请使用新的。

答案 2 :(得分:0)

好的,让我们首先澄清您遇到的问题,以便我的解决方案更加清楚。

您的问题是您在计算机上本地托管了一个后端,尽管您可以在计算机本身上正常访问它,但是当您尝试从其他设备连接到它时却无法访问它。

此问题来自以下事实:您的网站托管在本地计算机上,并且外界无法访问。因此,由于移动电话的后端是私人的,因此通常位于移动网络上的电话无法访问后端网络,并且您的电话无法从其自己的网络访问此专用网络,这是由于以下事实:通常,您的路由器/ isp会阻止对端口80的传入请求,因此,即使您知道计算机的公用ip地址,仍然会被阻止。

现在我们讨论了这个问题,让我们仔细研究解决方案所需要的内容。 一个解决方案将要求您的手机和计算机都在同一网络上,或者将计算机暴露于公共互联网中。

让我们通过一些方法来实现这一目标。

  1. 实现这一目标的第一个(可能是最简单的方法)是将计算机和手机放在同一网络上。可以通过将电话连接到为计算机提供互联网访问权限的同一路由器来实现。连接到同一网络后,您只需使用计算机的本地IP地址替换my.backend.test即可,而不是使用此URL http://my.backend.test/api/some-route,因此,如果您的计算机的本地IP为192.168.0.2那么它变成了http://192.168.0.1/api/some-route,现在您将可以通过手机访问后端。

注意:您可能想知道如何确定计算机的本地IP地址?在Windows上,可以通过以下方法找到它:进入网络设置>右键单击您的网络连接>在上下文菜单中单击属性,然后查找显示ipv4地址的字段,即您的本地ip。在Mac上,您可以通过以下方法找到它:转到系统偏好设置>网络>单击旁边带有绿点的连接>然后在状态标签下,您将看到您连接到的当前本地IP地址。

如果您不介意将手机连接到与计算机相同的网络而遇到麻烦,则解决方案#1很棒,但是由于各种原因(例如缺少wifi等)或仅仅是因为它而造成的痛苦或不切实际您希望手机能够从任何地方访问它,无论它在什么网络上,如果是这种情况,解决方案2就是您的理想选择。

  1. 我们将使用反向隧道软件来使您的计算机本地主机访问整个Internet,在我们的案例中,最受欢迎的选择之一是Ngrok,here可用。 Ngrok的作用是创建到本地主机的隧道,并将其分配给可公共访问的域,例如yourapp.ngrok.io,您可以使用它代替my.backend.test来从任何地方访问您的应用程序。因此,一旦启用了Ngrok,您就可以将http://my.backend.test/api/some-route替换为http://yourNgrokAppDomainName.ngrok.io/api/some-route,无论您在哪个网络上,都可以从任何地方从手机访问后端。

总而言之,这是通过电话访问计算机上的后端的两种方法。希望对您有所帮助。

相关问题