Как подключиться к этому локальному хосту с другого компьютера в той же сети?

172

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

user1219572
источник

Ответы:

284

Это определенно возможно. Мы рассмотрим общий случай с Apache здесь.

Допустим, вы большой поклонник Symfony2 и хотели бы получить доступ к своему веб-сайту Symfony на http://symfony.local/4 разных компьютерах (главном, на котором размещен ваш веб-сайт, а также Mac, Windows и Linux-дистрибутив, подключенный (беспроводной или нет) к главный компьютер.

Общий эскиз:

введите описание изображения здесь


1 Настройте виртуальный хост :

Сначала вам нужно настроить виртуальный хост в вашем httpd-vhosts.confфайле apache . На XAMP , вы можете найти этот файл здесь: C:\xampp\apache\conf\extra\httpd-vhosts.conf. На MAMP , вы можете найти этот файл здесь: Applications/MAMP/conf/apache/extra/httpd-vhosts.conf. Этот шаг подготавливает веб-сервер на вашем компьютере для обработки symfony.localзапросов. Вам необходимо указать имя виртуального хоста, а также корневую / основную папку вашего сайта. Для этого добавьте следующую строку в конец этого файла. Вы должны изменить, DocumentRootгде ваша основная папка. Здесь я взял /Applications/MAMP/htdocs/Symfony/в качестве корня моего сайта.

<VirtualHost *:80>
    DocumentRoot "/Applications/MAMP/htdocs/Symfony/"
    ServerName symfony.local
</VirtualHost>

2 Настройте свой файл hosts :

Чтобы клиент (в данном случае ваш браузер) понял, что на symfony.localсамом деле означает, вам нужно отредактировать файл hosts на вашем компьютере. Каждый раз, когда вы набираете URL в вашем браузере, ваш компьютер пытается понять, что это значит! symfony.localничего не значит для компьютера. Поэтому он попытается разрешить имя symfony.localв IP-адрес. Он сделает это, сначала посмотрев файл hosts на вашем компьютере, чтобы узнать, может ли он сопоставить IP-адрес с тем, что вы ввели в адресной строке. Если это не может, то он попросит DNS-серверы . Хитрость в том, чтобы добавить следующее в ваш файл hosts.

  • На 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 file

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

С этого момента каждый раз, когда вы вводите symfony.local на этом компьютере, ваш компьютер будет использовать интерфейс обратной связи для подключения к symfony.local. Он поймет, что вы хотите работать на localhost (127.0.0.1).

3 Доступ symfony.localс другого компьютера :

Наконец, мы подошли к вашему главному вопросу:

Как я могу теперь получить доступ к своему веб-сайту через другой компьютер?

Ну, это теперь легко! Нам просто нужно рассказать другим компьютерам, как они могут найти symfony.local! как нам это сделать?

3a Получить IP-адрес компьютера, на котором размещен сайт :

Сначала нам нужно узнать IP-адрес компьютера, на котором размещен веб-сайт (тот, над которым мы работаем с самого начала). В терминале, по типу MAC и LINUXifconfig |grep inet , по WINDOWSтипу ipconfig. Давайте предположим, что IP-адрес этого компьютера 192.168.1.5 .

3b Отредактируйте файл hosts на компьютере, с которого вы пытаетесь зайти на сайт. :

Опять же, на 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, чтобы протестировать свой веб-сайт в Internet Explorer через Virtual Box (если вы не хотите использовать компьютер с Windows). Это прекрасно объясняется в статье Создание среды тестирования Windows / IE на OSX .


Вы также можете получить доступ к своему локальному хосту с мобильных устройств

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

Итак, решение - установить прокси-сервер на компьютере, на котором размещен веб-сайт, и подключиться к этому прокси с вашего iphone. На самом деле это очень хорошо объяснено в следующих постах и ​​не так долго настраивать:

На Mac я бы порекомендовал: Тестирование веб-сайта Mac OS X с использованием локального имени хоста на мобильном устройстве : Использование SquidMan в качестве прокси. Это 100% бесплатное решение. Некоторые люди также могут использовать Чарльза в качестве прокси-сервера, но это 50 $.

В Linux вы можете адаптировать Mac OS выше, используя Squid в качестве прокси-сервера.

В Windows вы можете сделать это с помощью Fiddler . Решение описано в следующем посте: Мониторинг трафика iPhone с помощью Fiddler


Изменить 23/11/2017: Эй, я не хочу изменять мой файл Hosts

@Dre. Любой возможный способ получить доступ к сайту с другого компьютера, не редактируя файл хоста вручную? скажем у меня 100 компьютеров хотели зайти на сайт

Это интересный вопрос, и, поскольку он связан с вопросом ОП, позвольте мне помочь.

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

Давайте представим, что у вас есть маршрутизатор (192.168.1.1). Этот маршрутизатор имеет DHCP-сервер и выделяет IP-адреса для 100 компьютеров в сети.

Теперь, скажем, у вас, как и выше, в той же сети, машина, на 192.168.1.5которой есть ваш сайт. Мы назовем эту машину pompei.

$ echo $HOSTNAME
pompei

То же самое , как и раньше, что машина pompeiв 192.168.1.5запускает HTTP сервер , который обслуживает ваш сайт symfony.local.

Для того, чтобы каждая машина знала, что symfony.localна ней размещен, pompeiнам теперь потребуется собственный DNS-сервер в сети, который знает, где symfony.localнаходится. Устройства в сети смогут разрешать доменные имена, обслуживаемые pompeiвнутри.

3 простых шага.

Step 1: DNS Server

Настройте DNS-сервер в своей сети. Давайте сделаем это pompeiдля удобства и используем что-то вроде dnsmasq .

Dnsmasq предоставляет системы доменных имен (DNS) форвардер , ... .

Мы хотим 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.

* Примечание: * ВСЕГДА перезапускайте DNSmasq при изменении файла / etc / hosts, так как в противном случае изменения не вступят в силу.

Step 2: Firewall

Для работы pompeiнеобходимо разрешить входящие и исходящие «доменные» пакеты, которые идут от и к порту 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

Step 3: Router

Сообщите вашему маршрутизатору, что ваш DNS-сервер включен 192.168.1.5. В большинстве случаев вы можете просто войти в свой маршрутизатор и изменить это вручную очень легко.

Вот это, когда вы на машине и спросить symfony.local, он будет просить ваш сервер DNS , где symfony.localразмещенный, и как только она получила ответ от сервера DNS, затем отправить надлежащее на запрос HTTP , чтобы pompeiна 192.168.1.5.

Я позволю тебе играть с этим и наслаждаться поездкой. Эти 2 шага являются основными рекомендациями, поэтому вам придется отлаживать и тратить несколько часов, если вы делаете это впервые. Допустим, это немного более продвинутая сеть, есть первичный DNS-сервер, вторичный DNS-сервер и т . Д. Удачи!

Мик
источник
Хороший ответ. Я следил за последней частью, пока не добрался до «Мониторинга трафика iPhone с помощью Fiddler». Это указывает на домашнюю страницу Fiddler. Это должна быть ссылка: conceptdev.blogspot.com/2009/01/…
helpse
Я изменил файл хоста, но проблема в том, что у меня также работает сервер IIS, поэтому мой «localhost» или «127.0.0.1» указывает на сервер IIS, как я могу заменить его на сервер xamp?
Узаир Али
1
@ Придумайте какой-нибудь возможный способ доступа к веб-сайту с другого компьютера, не редактируя hostфайл вручную? скажем, у меня есть 100 компьютеров, которые хотели получить доступ к сайту
Дренил
1
@Dre Да, вам нужно будет внести изменения в свою сеть, чтобы каждая машина знала, где размещен ваш сайт. Я добавил информацию в конце ответа. Надеюсь, это поможет.
Мик
1
Отличное объяснение!
Пастух
25

Для тестирования на обоих ноутбуках с одинаковым беспроводным подключением и через Интернет вы можете использовать сервис, такой как http://localhost.run/ или https://ngrok.com/

tommyvn
источник
3
localhost.run работал как шарм. Мой сервер работал на порту 8000 и только что изменил командную строку с 80 на 8000.
Isuru
3
Вот Это Да! Круто ... это действительно сработало на одном дыхании ... спасибо @tommyvn
Jabongg
Проще настроить NGROK, чем обновлять файл локальных хостов. +1
BlackHatSamurai
Простое решение для быстрого теста
Шамила
15

Если обе машины находятся в одной рабочей группе, откройте cmd.exeна машине, к которой вы хотите подключиться, введите ipconfigи запишите IP в IPv4 Addressстроке.

Затем на машине, к которой вы хотите подключиться, используйте http:// + the IP of the target machine.

Это должно сделать это.

Кодрин Евгений
источник
3
Это будет работать, если порт 80 является портом для приложения (обычно это так), но имейте в виду, что мы можем использовать другой порт. Это означало бы http: // + IP-адрес целевой машины + ": PORT_NUMBER"
ggderas
Это было простое решение, которое я искал. @Codrin Eugeniu: Пожалуйста, рассмотрите возможность включения предложения ": PORT_NUMBER" в ваш ответ, упомянутый ggderas. Для меня это было необходимо, так как я подключился через порт 8088, используя Apache Superset.
Оумеронен
8

В Mac OS X:

  1. В терминале запустите, ifconfig | grep 192.чтобы получить внутренний IP-адрес вашей машины в текущей сети. Это может быть что-то вроде192.168.1.140

  2. Запустите сервер. Например, node server.jsможет запустить сервер на каком-то порту.

  3. На вашем телефоне зайдите на 192.168.1.140:3000любой другой порт вашего сервера.

Рафаэль Рафатпана
источник
6

Этот инструмент сильно меня спас, так как у меня нет прав администратора на моей машине, и у меня уже установлены 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/

Тиаго С. С Вентура
источник
Я запускаю веб-приложение на localhost: 3000. Я использовал browser-sync start --proxy localhost:3000в отдельной оболочке. На другом устройстве, которое подключено к сети, я печатаю: ${computerIP}:3000но ничего не вижу. Я предполагаю, что есть кое-что еще, что я должен предоставить.
Бен Карп
5

Возможно, ваши брандмауэры не позволяют вам получить доступ к веб-серверу localhost.
Если требуется, поместите IP-адреса безопасности антивирусной сети для обоих компьютеров в качестве безопасных IP-адресов.
Как найти IP-адрес вашего ПК с Windows: Пуск> (Выполнить) введите: cmd (Enter)
(откроется командная строка черного ящика)
введите ipconfig (Enter)
Допустим, на вашем ПК установлен веб-сервер Apache или IIS : 192.168.0.3
и вы хотите получить доступ к вашему веб-серверу с вашего ноутбука. (IP-адрес ноутбука - 192.168.0.5).
На своем ПК вы вводите: http: // localhost / в браузере Firefox или Internet Eplorer, чтобы получить доступ к вашим данным на веб-сервере.
На своем ноутбуке вы набираете http://192.168.0.3/ для доступа к вашему веб-серверу на вашем ПК.

Чтобы все эти вещи работали, вам нужно правильно установить веб-сервер (например, IIS, Apache, XAMP, WAMP и т. Д.).

Если это не работает, попробуйте пропинговать ваш компьютер с вашего ноутбука:
Откройте команду propmt на вашем ноутбуке: Start> cmd (Enter)
ping 192.168.1.3 (Enter)
Если сбой ping не пройден, брандмауэры блокируют ваше соединение или сеть кабели неисправны. Перезагрузите модем или сетевой коммутатор и ваши машины.
Закройте такие программы, как программы чата, которые используют ваши порты.
Вы также можете попробовать другой номер порта: http: 192.168.0.3: 80 или http: 192.168.0.3: 81 или любое случайное число в конце

KarlosFontana
источник
1
Спасибо, @KarlosFontana - ты тоже только что ответил на мой вопрос. У меня были проблемы с подключением моего iPhone к серверу, который я написал на рабочем столе. IPhone был подключен к WiFi моего компьютера. Ваша последняя строка ответила на мой вопрос :-)
Tommy
4

Это примечание, если вы все еще не можете получить доступ к localhost с других устройств после выполнения вышеописанного шага. Это может быть связано с тем, что 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  
кругозор
источник
0

Если вы работаете в Windows, используйте ipconfig, чтобы получить локальный адрес IPv4, а затем укажите его в файле конфигурации Apache: httpd.conf , например:

Listen: 10.20.30.40:80

Перезагрузите сервер Apache и протестируйте его с другого компьютера в сети.

Шаси Кант
источник