подключение к локальному бэкэнду из приложения Android - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть серверная часть Laravel, к которой я пытаюсь подключиться из приложения для Android.мой файл hosts имеет

   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>

Я могу получить http://my.backend.test/api/some-route штраф из Google ARC, ноне с моего телефона.Кажется, мне нужно использовать свой локальный 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 голосов
/ 26 сентября 2018

Хорошо, давайте сначала проясним проблему, с которой вы столкнулись, чтобы мое решение было более понятным.

Ваша проблема в том, что вы размещаете серверную часть локально на своем компьютере, и хотя вы можете получить к ней доступ безпроблема на вашем компьютере, когда вы пытаетесь подключиться к нему с другого устройства, вы не можете получить к нему доступ.

Эта проблема возникает из-за того, что ваш веб-сайт размещен локально на вашем компьютере и недоступенво внешний мир, поэтому ваш телефон, который предположительно находится в мобильной сети, не может получить доступ к вашему бэкэнду, поскольку ваш бэкэнд находится в вашей собственной частной сети, а ваш телефон не может получить доступ к этой частной сети из своей собственной сети. Это связано с тем, что обычноваш маршрутизатор / isp блокирует входящие запросы на порт 80, поэтому, даже если вы знаете общедоступный IP-адрес вашего компьютера, вы все равно будете заблокированы.

Теперь, когда мы обсудили проблему, давайте рассмотрим, что повлечет за собой решение.Решение может заключаться в том, что либо ваш телефон, и ваш компьютер находятся в одной сети, или вы выставляете свой компьютер в общедоступный Интернет.

Давайте попробуем это сделать несколькими способами.

  1. Первый и, возможно, самый простой способ добиться этого - подключить компьютер и телефон к одной сети.Этого можно добиться, подключив телефон к тому же маршрутизатору, который предоставляет вашему компьютеру доступ в Интернет.Как только вы подключитесь к той же сети, все, что вам нужно сделать, это вместо того, чтобы использовать этот URL http://my.backend.test/api/some-route, заменить my.backend.test на локальный IP-адрес вашего компьютера, так что если локальный IP-адрес вашего компьютера равен 192.168.0.2, тогда онстановится этим http://192.168.0.1/api/some-route, и теперь вы сможете получить доступ к своему бэкэнду со своего телефона.

Примечание. Возможно, вы задаетесь вопросом, как определить локальный IP-адрес моего компьютера?В окнах это можно найти, зайдя в настройки сети> щелкните правой кнопкой мыши ваше сетевое соединение> щелкните свойства в контекстном меню, а затем найдите поле с адресом ipv4, то есть вашим локальным ip.На Mac вы можете найти его, перейдя в «Системные настройки»> «Сеть»> щелкнув по соединению с зеленой точкой рядом с ним> Затем под меткой состояния вы увидите текущий локальный IP-адрес, к которому вы подключены.

Решение № 1 отлично подходит, если вы не возражаете против трудностей с подключением телефона к той же сети, что и ваш компьютер, но, допустим, это неприятно или нецелесообразно по разным причинам, таким как отсутствие Wi-Fi и т. Д. Или просто таквы хотите, чтобы ваш телефон имел доступ к компьютеру из в любом месте и независимо от того, в какой сети он находится В этом случае решение 2 для вас.

Мы разрешим доступ к вашим компьютерам с локального хоста во весь Интернет с помощью программного обеспечения обратного туннелирования, в нашем случае одним из самых популярных вариантов является Ngrok, доступный здесь .Ngrok создает туннель для вашего локального хоста и назначает ему общедоступный домен, такой как yourapp.ngrok.io, который вы можете использовать вместо my.backend.test для доступа к вашему приложению из любого места.Поэтому, включив Ngrok, вы просто замените http://my.backend.test/api/some-route на http://yourNgrokAppDomainName.ngrok.io/api/some-route, и вы сможете получить доступ к своему бэкэнду со своего телефона из любой точки мира, независимо от того, в какой сети вы находитесь.

В итоге этиЕсть два способа получить доступ к своему бэкэнду на вашем компьютере с телефона.Надеюсь, это поможет.

0 голосов
/ 28 сентября 2018

Если я правильно понимаю: вы можете получить доступ к вашему серверу с другого компьютера в той же сети (так что это не проблема брандмауэра), но только если вы используете имя (добавлено в файл hosts клиента), а не IP-адрес.

Является ли ваша конфигурация первым виртуальным хостом?apache ищет ServerName, совпадающее с именем, указанным в запросе (например, URL), затем возвращается к первому, в вашем случае к домашней странице ubuntu.

В качестве теста, что произойдет, если выиспользуйте

ServerName      192.168.0.1 (i.e. the IP used in the URL)

Я думаю, это будет работать, если вы обращаетесь к серверу по IP-адресу, но больше не по имени

0 голосов
/ 26 сентября 2018

Попробуйте этот метод

ip:port

Пример

10.0.2.2:80

Примечание. Брандмауэры могут вызывать проблемы с этим.В Windows по умолчанию включен брандмауэр Microsoft Windows.Возможно, вам придется отключить его

IP-адрес

Если вы используете эмулятор:

10.0.2.2

Если вы используете реальное устройство:

  1. Подключите их вта же сеть.Либо с помощью соединения WiFi, либо с помощью функции USB-модема в телефоне.
  2. Найдите IP-адрес своего компьютера, набрав ipconfig в cmd (если вы используете Windows)

Порт

Порт по умолчанию 80.Если вы изменили его, используйте новый.

...