php-Android应用无法访问Vagrant Homestead托管的Web API

注意:
我是Laravel,Vagrant-Homestead设置和Android网络库Retrofit的新手.但是我擅长Android和PHP Web开发.但是,我设置了Laravel,开发了一个简单的测试Web API,仅用于测试Android App中的Retrofit库.另外,请不要将此标记为以下Q&A thread的重复问题.即使它提出相同的问题,这些问题也有所不同.

我的问题:
我可以在Vagrant-Homestead托管的Web API中通过安装在主机OS X Mac中的Web浏览器进行访问.我的宅基地也有两个Laravel网站ll5.app和tapi.app(这是API).

 _____________Mac OS X on MB Pro___________________
|  _______________            ______________      |
| | Vagrant       |          |              |     |
| |http://api.app | <------> | Web Browser  |     | IP: 192.168.1.7
| |_______________|          |______________|     |
|_________________________________________________|

But, I still couldn't fix this up for the following:

 _____________Mac OS X on MB Pro_______________________
|  __________________            ________________      |
| | Vagrant          |          |                |     |
| |http://api.app    | <---X--> | Android App    |     |
| | IP:192.168.10.10 |          |IP:192.168.56.1 |     |
| |__________________|          |________________|     |
|______________________________________________________|

我的主机文件如下所示:

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
192.168.10.10   ll5.app
192.168.10.10   tapi.app

以下只是我的Homestead.yaml的一部分:

folders:
    - map: "/Users/randika/Private_Projects/webapps/"
      to: "/home/vagrant/webapps"

sites:
    - map: tapi.app
      to: "/home/vagrant/webapps/test_api/public"
    - map: ll5.app
      to: "/home/vagrant/webapps/ll5/public"

我尝试给出以下内容,以尝试使用Retrofit库进行Web服务调用.

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("<address>")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

For the <address> I tried giving following values:
        http://tapi.app
        192.168.10.10:8000

当我尝试使用Genymotion Android的Web浏览器访问该地址,地址为http://192.168.10.10:8000时,它将加载ll5.app主页而不是API.

如何解决这个问题?任何帮助表示赞赏.
至少只是告诉我这不能完成?

附注:现在已经是凌晨1点了,从上周末开始,我一直在为此苦苦挣扎!

解决方法:

我不必放弃这个问题并一劳永逸地解决它.因为当我需要托管某些东西并在同事之间公开共享时,我已经厌倦了寻找Web托管者的工作.

答案骨架:这包括您以下内容:

必须做的事情:

>修改主机文件
>修改流浪汉中的Nginx文件

可选的待办事项:

>创建一个Atlas帐户,并使用流浪者共享功能来共享访问权,以通过Internet在世界任何地方访问您的Vagrant-Homestead Laravel开发应用程序.

逐步回答:

1.介绍我的Mac Vagrant Homestead环境.

我的主机MacBook当前IP地址:192.168.1.7

我在Homestead.yaml中定义的Vagrant-Homestead IP:192.168.10.10

我之前在我的问题中已经告诉过我,我有多个站点(ll5.app和tapi.app).因此,以下是我的Homestead.yaml的一部分,它映射了多个站点.

folders:
     - map: "/Users/randika/Private_Projects/webapps/"
       to: "/home/vagrant/webapps"

 sites:
     - map: tapi.app
       to: "/home/vagrant/webapps/test_api/public"
     - map: ll5.app
       to: "/home/vagrant/webapps/ll5/public"

好的,现在我们可以继续第二步了.抱歉,由于编辑器错误,Hosts文件的上述部分未采用代码格式.

2.我修改了主机文件,如下所示:

Note that I’ve mapped my current IP address with the Vagrant IP address.

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
192.168.10.10   tapi.app
192.168.10.10   ll5.app
192.168.1.7     192.168.10.10

并保存它.

3.开始您的无业游民和供应.

 cd Homestead/
 vagrant up
 vagrant provision

4.让我们去编辑流浪汉中的Nginx文件.通过ssh登录到流浪汉.

 vagrant ssh

您应该看到如下所示的vagrant ssh提示符:vagrant @ homestead:〜$

5.现在,让我们为每个预配置的Vagrant托管Web应用程序编辑Nginx配置文件.

 cd /etc/nginx/sites-available
 ls

您将看到以下Web应用程序配置列表(根据我的设置):

 ll5.app  tapi.app

在这两个Web应用程序中,我想通过Android Genymotion访问tapi.app,但是即使我提供了Vagrants VirtualBox IP或Vagrant IP地址,也无法访问它,因为我在vagrant homestead中托管了多个站点.如果是单个站点设置,则可以通过Vagrant IP地址访问.
如下获取所需的与应用程序相关的Nginx Config文件:(此步骤假定您了解Vim编辑器的基础知识).

 sudo vim tapi.app     ----> This will give you the chances to edit that NginX config file.

就像下面这样:

server {
  listen 80;
  listen 443;
  server_name tapi.app;
  root "/home/vagrant/webapps/test_api/public";

并将其更改为如下所示:

server {
  listen 80 default_server;
  listen 443 default ssl;
  server_name tapi.app;
  root "/home/vagrant/webapps/test_api/public";

希望您注意到以下两行:

 listen 80;    to    listen 80 default_server;
 listen 443;   to    listen 443 default ssl;

好的,现在保存Nginx Config文件并从Vim编辑器退出.

6.现在,最后一个基本命令将在无所事事的ssh中执行:

sudo service nginx reload

如果您按照上述步骤进行了最后一步,那么现在您可能已经找到了问题的答案(过去5个晚上尝试用较少的睡眠时间解决此问题后,我就得到了我的问题的答案:D ).注意:在重新加载Nginx之后,不要再去配置vagrant,因为如果这样做,上面的Nginx配置文件将通过您的编辑重写.

注意事项:

请记住,我们编辑Nginx Config文件只是为了使我们的站点之一可以通过服务器默认提供服务,因此之所以执行这些步骤,只是因为我们在Vagrant-Homestead框中有多个站点.因此,在完成所需的操作之后,我们应该回滚对特定Nginx Config文件所做的更改,就像通过Vagrant SSH访问该文件一样.否则,如果您保留此更改,那么其他站点将无法正常运行. For further readings please read the following thread.

可选的待办事项:

>假设您要在Vagrant-Homestead下开发一个项目(Web API或Web应用程序),并想通过Internet与同事共享?而且您也有另外一堆网站(这就是我们在上述步骤中苦苦挣扎的原因).因此,我们也可以称之为(无用份额).因此,我已经编辑了Nginx文件,并通知服务器我需要将哪个站点用作默认站点,因此通过进行Vagrant共享,现在可以通过共享URL为该站点提供服务.因此,让我们开始吧:

Visit this link只是为了让我们对我们要做的事情有一些背景了解.

流浪者共享步骤:

> Visit the following link,然后创建您的Atlas帐户.
>仅通过键入exit从Vagrant ssh退出,然后在Homestead目录中,按如下所示登录到vagrant:

流浪汉登录
>在提示时分别提供您的Atlas帐户详细信息(用户名和密码).
>流浪者分享的最后一步是,流浪者分享本身.如下进行:

流浪者份额

这应该为您提供如下结果,该结果具有可全局访问的临时URL,该URL一直持续到您停止使用Ctrl C命令共享为止.

php-Android应用无法访问Vagrant Homestead托管的Web API

希望这个答案对其他人有帮助,并且可以节省他们的一生.

为这个星球上的所有工程师欢呼!

上一篇:使用PHP通知未定义变量


下一篇:Centos7/RHEL7 开启kdump