Как веб-сервер на своём компьютере сделать доступным для других


После установки веб-сервера может понадобиться сделать его доступным для других в локальной или глобальной сети. Это может быть нужно, например, чтобы тестировать свой сайт на разных платформах (посмотреть, как выглядит сайт на мобильных телефонах) или если вы создали сервис (файлообменник, чат и т.п.), который должен быть доступен для других.

Локальные и глобальные компьютерные сети

Чтобы добиться нужного результата, необходимо знать, что компьютерные сети бывают локальными и глобальными. Пример локальной сети: домашний роутер, к которому подключены компьютеры и мобильные устройства. Глобальная сеть – это Интернет.

Глобальная сеть и локальные сети различаются IP адресами. Каждое сетевое устройство в любой сети должно иметь свой уникальный IP адрес. Особенностью IP адресов в глобальной сети является то, что они уникальны на глобальном уровне, т.е. к Интернету не могут быть подключены устройства, у которых одинаковый IP. В локальных сетях IP адреса также уникальны, но уникальны они только на локальном уровне: т.е. в вашей домашней сети IP адрес, к примеру, 192.168.0.2 может быть только у одного устройства, иначе это вызовет проблемы; но у других пользователей, имеющих свои локальные сети, в этих сетях также может использоваться IP адрес 192.168.0.2.

Поскольку локальные сети напрямую не связаны друг с другом, не возникает путаницы из-за одинаковых IP адресов. Связь между локальными сетями может происходить черед подключение к глобальной сети. Это происходит обязательно через устройства, которые имеют глобальный IP.

Примечание: Я знаю про NAT (технология, позволяющая нескольким устройствам иметь Интернет-подключение через один IP адрес), про объединение локальных сетей с помощью другой локальной сети, про туннелированние и т.д., но сознательно пропускаю это для упрощения.

Локальные и глобальные IP адреса

Чтобы не запутаться в терминологии, глобальный IP адрес ещё называют «внешним», «белым» - это разные обозначения одного и того же.

Локальный IP адрес называют «внутренним», «серым», «приватным» - это всё одно и то же.

Работа домашней (локальной) сети, в которой присутствует роутер и несколько устройств, подключённых к роутеру, обычно выглядит следующим образом:

  1. Роутер подключается к Интернет-провайдеру. Интернет-провайдер назначает роутеру внешний IP адрес, который позволяет устанавливать соединения с глобальной сетью Интернет.
  2. Компьютеры по кабелю или Wi-Fi, а также мобильные телефоны через Wi-Fi подключаются к роутеру. Роутер раздаёт им локальные IP адреса.
  3. Если два устройства в локальной сети хотят обменяться данными, то они это делают через роутер, но сетевые пакеты не отправляются в глобальную сеть.
  4. Если какому-либо устройству понадобиться «выйти в Интернет», то он передаст соответствующий запрос роутеру, роутер подключится к нужному узлу в глобальной сети, роутер же получит ответ от узла в глобальной сети и передаст этот ответ устройству в локальной сети, которое сделало первоначальный запрос.

Настройка веб-сервера, чтобы его можно было открыть на других компьютерах в локальной сети

По умолчанию, веб-сервер Apache настроен отвечать всем, кто пытается к нему подключиться. Подключиться к компьютеру, а, следовательно, и к веб-серверу, проще всего по его IP адресу.

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

Как узнать локальный IP адрес

Но чтобы это сделать, нужно знать, какой у компьютера с веб-сервером IP адрес. Как уже было сказано, локальные IP раздаёт роутер. Локальные IP могут быть в следующих диапазонах:

  • 10.0.0.0 - 10.255.255.255
  • 100.64.0.0 - 100.127.255.255
  • 172.16.0.0 - 172.31.255.255
  • 192.168.0.0 - 192.168.255.255

Причём, если вы не меняли настройки роутера, чаще всего используется диапазон 192.168.0.0 - 192.168.255.255. Скорее всего, ваш компьютер имеет адрес вида 192.168.0.* или 192.168.1.*. Но какой именно?

В Windows чтобы узнать локальный IP адрес откройте командную строку (нажмите Win+x, и выберите Windows PowerShell). В открывшемся окне выполните команду

ipconfig

У вас, наверное, будет меньше сетевых устройств, но в любом случае, для всех из них будет выведена информация, в том числе IP адреса.

Мой компьютер имеет локальный IP адрес 192.168.0.90. Если я, например, в телефоне, подключённому по Wi-Fi к роутеру наберу в адресной строке 192.168.0.90, то откроется веб-страница моего локального веб-сервера, запущенного на компьютере (да, у меня там бардак):

Внимание: если у вас не получается открыть веб-сервер, хотя IP адрес введён правильно – попробуйте отключить файервол. Если это помогло, то файервол можно включить, но настройте исключение для 80 порта.

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

Как уже было сказано, локальный IP адреса «раздаёт» роутер. Адреса являются произвольными в рамках данной подсети.


Чтобы исправить ситуацию с постоянно меняющимся локальным IP, давайте познакомимся с такими понятиями как динамичный и статичный IP адреса.

Динамичный IP адрес выдаётся произвольно (роутером, Интернет-провайдером). Он может меняться при последующих подключениях.

Статичный IP адрес закреплён за сетевым интерфейсом (фактически, закреплён за компьютером, мобильным телефоном). Он не меняется при последующих переключениях.

В локальной сети, по умолчанию используются динамичные IP адреса, но это легко изменить.

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

  • в настройках сетевого интерфейса (на компьютере, в мобильном телефоне)
  • в настройках роутера

Не нужно делать изменения и там, и там – достаточно сделать настройки или на компьютере, или в роутере. Принципиальной разницы нет, какой именно метод вы будете использовать.

Настройка постоянного IP в Windows

Для настройки статичного локального адреса на компьютере откройте «Сетевые подключения». Проще всего это сделать набрав в командной строке Windows:

ncpa

Выберите интересующий вас сетевой адаптер (сетевой подключение), нажмите на него правой кнопкой мыши и выберите «Свойства»:


В открывшемся окне выберите «IP версии 4 (TCP/IPv4)» и нажмите кнопку «Свойства»:

Вы увидите следующее:

Переключите на «Использовать следующий IP адрес».

Теперь нужно заполнить все поля. Первые три поля являются взаимосвязанными и также связаны с роутером. Когда ранее мы смотрели свой локальный IP адрес, нам также была показана такая информация как Маска подсети (на моём скриншоте это 255.255.255.0) и Основной шлюз (на моём скриншоте это 192.168.0.1). Посмотрите ваши значения (вполне вероятно, что они будут такими же) и введите их в поля «Маска подсети» и «Основной шлюз». Кстати, основной шлюз – это адрес роутера. Очень часто локальными адресами роутера являются 192.168.0.1 и 192.168.1.1


В поле IP-адрес введите желаемый IP. Он должен соответствовать вашей сети. Т.е. если роутер имеет IP 192.168.0.1, то компьютер должен иметь IP вида 192.168.0.* (например, 192.168.0.100), если роутер имеет IP 192.168.1.1, то компьютер должен иметь адрес вида 192.168.1.* (например, 192.168.1.100).

Чтобы не было проблем, устройства в одной локальной сети не должны иметь одинаковый IP адрес.

В качестве DNS серверов («Предпочитаемый DNS-сервер» и «Альтернативный DNS-сервер») введите 8.8.8.8 и 8.8.4.4 соответственно.

У меня получилось так (для компьютера я выбрал IP 192.168.0.100):

Закройте окна с сохранением настроек.

Теперь при каждом подключении ваш компьютер будет иметь один и тот же IP адрес.

Настройка статичного IP в роутере

Для каждого роутера детальная инструкция по настройке различается. Но схема общая: в настройках локальной сети перейдите к настройкам DHCP-сервера, выберите желаемые компьютеры/телефоны по MAC-адресу и привяжите их к определённым локальным IP адресам.

Пример настройки статических IP адресов в ZyXEL Keenetic Lite II.

Имеется перечень компьютеров со следующими именами и следующими желательными статичными IP адресами:

  • HackWare-Server-2022 — 192.168.1.60
  • VYACHESLAV — 192.168.1.61
  • HackWare — 192.168.1.62
  • HackWare-Win — 192.168.1.63
  • HackWare-Windows-En — 192.168.1.64
  • HackWare-Server — 192.168.1.65

На роутере Переходим в Домашняя сеть → Параметры IP. По умолчанию размер пула адресов был равен 20, увеличиваем его количество до 40. Поскольку первым IP адресом пула является 192.168.1.33, то теперь доступный для использования диапазон стал 192.168.1.33-192.168.1.72.

Переходим в список устройств (вкладка «Устройства»):


Выбираем поочереди каждое устройство, ставим галочку «Постоянный IP-адрес», вводим желаемый статичный IP и нажимаем кнопку «Зарегистрировать»:

Повторяем эту операцию для каждого компьютера и устройства, которым мы хотим назначить статичные IP адреса.

Когда всё будет готово, все устройства со статичными адресами будут выделены полужирным шрифтом.

Изменения вступят в силу при следующем подключения устройств к роутеру.

Как открыть веб-сервер для доступа из Интернета

Поскольку Apache по умолчанию прослушивает все сетевые интерфейсы и отвечает всем, то можно предположить, что если в веб-браузере ввести глобальный адрес, то мы увидим наш веб-сайт.

Если кабель Интернет-провайдера подключён к вашему компьютеру напрямую, то, вероятно, доступ по IP адресу будет работать (имеются нюансы с NAT).

Но если вы используете роутер, то IP адрес принадлежит роутеру. Если из Интернета приходит запрос на роутер, то он просто не знает, какому именно устройству в локальной сети переадресовать этот запрос. Более того, большинство роутеров имеют свой собственный веб-сервер – это он показывает страницы с настройками роутера в веб-браузере.

Поэтому для того, чтобы ваш локальный сайт начал быть видимом в Интернете, необходимо настроить переадресацию портов.

Переадресация портов доступна для настроек локальной сети и для настроек Интернет-подключения – нам нужно именно второе.

В роутере перейдите в настройки Интернета, найдите там переадресацию портов. Некоторые роутеры поддерживают Переключение портов – нам это не подойдёт.

В качестве порта для переадресации выберите 80, введите локальный IP адрес компьютера, на котором размещён веб-сервер и введите порт, на который будет происходить переадресация – 80, протокол TCP.

Теперь мой веб-сервер доступен также по внешнему IP:

Кстати, чтобы узнать свой внешний IP адрес перейдите на эту страницу: https://suip.biz/ru/?act=myip

Как сделать глобальный IP адрес статичным

Вы столкнётесь с той же проблемой, что и для локального IP адреса – скорее всего, ваш внешний IP адрес является динамичным и будет время от времени меняться. Если вам нужен статичный IP адрес, то, скорее всего, его придётся покупать у вашего Интернет-провайдера как дополнительную услугу с ежемесячной абонентской платой.

Также смотрите статью «Как защитить веб-сервер Apache от взлома в Windows».

Очень хороший хостинг сайтов

Если вы уже наигрались с локальным веб-сервером и почувствовали, что готовы выпустить ваш сайт в свет, то я рекомендую тот же хостинг, на котором работает этот сайт:


Рекомендуется Вам:

27 комментариев to Как веб-сервер на своём компьютере сделать доступным для других

  1. Sergey:

    Теперь жду статью как защитить свой веб-сервер от ddos)

    • Alexey:

      Для тех, кто ставит по инструкции свой первый веб-сервер, DDoS это не главная проблема безопасности (начать нужно с того, что хотя бы установить пароли на службы и ограничить доступ к этим служба из вне).

      Чтобы дидосили нужно обзавестись недругами, которые готовы тратить свои силы и, почти всегда, деньги на ЗАВЕДОМО ВРЕМЕННЫЕ проблемы в работе веб-сервера. DDoS это даже больше какой-то акт отчаянья – ну ненавижу я тебя, а сделать больше ничего не могу.

      А вообще статья по защиту от дидос атак точно будет. Правда сначала будет длинный и сложный материал про iptables, а затем статья про защиту от некоторых «детских» DDoS атак, в том числе с использованием iptables, правда в среде Linux.

  2. Руслан:

    Добрый день.

    Поставил по вашей инструкции Apache24, PHP … , - все работает по локальной сети – отлично, спасибо.

    Проблема возникла при попытке открыть страницу из интернета по внешнему IP моего роутера (определенного по ссылке на вашем сайте и проверенного на других – IP совпадают).

    Набираю этот внешний IP в браузере телефона (подключен к интернету по другой сети(не через мой роутер)) – получаю сообщение – “не удается получить доступ к сайту, превышено время ожидания ответа от сайта”

    Настройки роутера на переадресацию к локальному, статическому IP машины с Apache 24, сделал по вашей инструкции.

    Подскажите пожалуйста, что надо проверить?

    • Alexey:

      Приветствую!

      Даже если всё сделать правильно (в том числе проброску портов), но если Интернет-провайдер использует NAT, то возможности получить доступ к вашему веб-серверу не будет. Это особенность NAT — подключения работают только в одну сторону. В качестве решения проблемы — только аренда белого IP у вашего Интернет-провайдера.

      • Руслан:

        Добрый день Алексей.

        Арендовал белый IP и все заработало, спасибо.

        Подскажите, есть ли у вас статьи, о том как разместить /создать сайт  на таком локальном сервере с  именем уже ранее зарегистрированного/купленного домена

        (домен зарегистрирован на Reg.ru, но сайт пока не создан и не привязан к IP)

        Может какие ссылки порекомендуете.

        Спасибо.

        • Alexey:

          У вас уже должен быть доступ к управлению DNS записями домена (посмотрите в панели управления). Создайте или отредактируйте запись A чтобы она содержала IP вашего веб-сервера.

          Этот скриншот просто для примера, какие A записи можно добавить (у вас будет другой интерфейс, так как у меня не reg.ru).

          В принципе, когда обновятся записи на DNS серверах, может уже заработать — в браузере при вводе доменного имени будет открываться сайт на вашем локальном компьютере. Если не заработает, или если просто хотите сделать «как надо», то в конфигурационном файле веб-сервера httpd.conf найдите директиву

          ServerName localhost

          И замените её на

          ServerName ВАШ_ДОМЕН

          Перезапустите веб-сервер.

          После этого при обращении к домену должно уже точно работать. На этом можно остановиться.

          Для работы с субдоменами (адреса вида *.domen.ru) или если захотите добавить ещё один сайт, посмотрите раздел «Подключение виртуальных хостов Apache в Windows» в этой статье. Если вы настраиваете DNS для своих доменов и субдоменов, то вам не нужно редактировать файл C:\Windows\System32\drivers\etc\hosts (как это говорится в той статье) — он только для тех ситуаций, когда нет настроек DNS.

          • Руслан:

            Добрый день Алексей.

            Вроде все понятно.

            Спасибо огромное.

            • Alexey:

              Забыл сказать очень важные вещи. В папке /phpmyadmin/ на сервере создайте файл .htaccess и скопируйте в него:

              Require local

              Это нужно, чтобы в phpMyAdmin не могли зайти посторонние — обязательно это сделайте. Для проверки, что запрет работает, попробуйте открыть с какого-нибудь другого устройства (например, с мобильного телефона) адрес вида http://ваш_сайт/phpmyadmin/ или http://ваш_IP/phpmyadmin/ - должно появиться сообщение, что доступ запрещён и ошибка 403. Либо просто удалите папку /phpmyadmin/, если вам не нужен phpMyAdmin.

              Аналогично сделайте с другими папками на сервере, в которые не должно быть доступа посторонним.

              Удалите файл i.php (если он есть) или другие проверочные файлы, которые создавались, к примеру, с phpinfo() и так далее.

              Затем зайдите на эту статью и по ней сделайте:

              • Запрет доступа из вне к MariaDB/MySQL
              • Установка пароля на MariaDB/MySQL

              Это нетрудно и не займёт много времени, но это всё нужно сделать обязательно!

              По умолчанию если зайти в папку без индексного файла, то показывается список всех файлов в этой папке. Скорее всего, вам это не нужно (и это хуже для безопасности). Поэтому в конфигурационном файле Apache httpd.conf найдите директиву <Directory "c:/Server/data/htdocs/">

              После неё найдите строку

              Options Indexes FollowSymLinks

              И замените на

              Options -Indexes

              Чтобы изменения вступили в силу, перезапустите веб-сервер.

              Если вы разрабатываете и тестируете скрипты прямо на этом сервере, то закройте доступ к папке, в которой находятся файлы проекта с помощью .htaccess как это показано чуть выше. Не храните бэкапов, файлы резервных копий, например, index.php,bak на этом сервере!

              Теперь относитесь к этому серверу как к публичному: всё, что не закрыто и не заблокировано это теперь как проходной двор. Отнеситесь к этому серьёзно, так как через веб-сервер можно скомпрометировать (взломать) весь компьютер!

              Для настройки ограничений рекомендуется ознакомиться со статьёй «Контроль доступа к сайту (блокировка по IP, User-Agent)».

  3. Руслан:

    Понял вас. Спасибо. 

  4. Yaroslav:

    Здравствуйте. А можно ли сделать веб-сервер доступным в интернете, используя динамический внешний ИП?

    • Alexey:

      Если Интернет-провайдер использует NAT, то нет, невозможно.

      Если NAT не используется, то при динамическом IP можно сделать сервер доступным по имени хоста используя сервис DDNS.

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

      ИМХО, НАМНОГО лучше или арендовать внешний IP или недорогой VPS сервер (у каждого сервера «в комплекте» уже идёт белый IP).

  5. Denis:

    Настроил на ноуте сервер IIS (Win7 x64), сделал доступным, отключил брандмауэр, добавил разрешающее правило для порта 80. Ноут подключен к Wi-Fi роутеру, переадресация включена. На локальный сайт захожу указывая внешний IP Wi-Fi роутера в браузере телефона.

    Однако, если телефон подключен по Wi-Fi к роутеру - сайт откроется. Если через мобильный интернет - страница не найдена.

    Что я мог забыть при настройке Wi-Fi роутера или сервера IIS ???

    • Alexey:

      Скорее всего вы всё сделали правильно, но ваш Интернет-провайдер использует NAT. Подробнее об этом здесь.

  6. Борис:

    Я открываю hotspot на ноутбуке и подключаю к нему телефон. Доступ к интернету у телефона появляется, а вот подключаться к веб-серверу не получается. Может что-то подсажете?

    • Alexey:

      У hotspot'а и всех подключённых к нему устройств своя сеть со своими IP адресами. Откройте свойства сетевого интерфейса (Wi-Fi карты) к которому подключён телефон и посмотрите, какой у него IP адрес. С этого IP адреса веб-сервер должен открываться с телефона. Ещё один вариант — открыть дополнительные настройки Wi-Fi подключения на телефоне и посмотреть IP адрес шлюза — это и есть адрес компьютера, который обеспечивает работу hotspot'а, — если его набрать в браузере, должен открыться веб-сервер.

  7. Алексей:

    Алексей, добрый день.

    Написал приложение на JS, WebAudio API, … запускаю на LocalHost. 
    Хочу сделать доступным извне, но точно не смогу защитить код,
    да и поддержка WebAudio на серверах, похоже, не полная.
     
    Отсюда вопрос, а возможна ли такая схема:
    1) сделать один комп. с LocalHost с сервером дома, с выделенным IP, где в браузере
    запускается приложение.
    2) На офиц. странице "приложения", на сайте, на арендуемом хостинге - только GUI,
    чтобы задавать парамеры (+ аккаунт пользователя и пр.)
    3) С этой стр. данные (задание) отправляются на домашний сервер, 
    там вычисляется результат и отправляется обратно. Т.е. внешне все выглядит так,
    будто работа делается на сервере (арендуемом хостинге).

    Спасибо заранее.
    Алексей 

  8. Igor:

    High Sierra. Использую MAMP Proо. Вопрос. Конфликтует Apache MAMPа с Apache MacOS. Интернет провайдер открыл порты. Регистратор доменного имени внес поправки в таблицу, запись А. Белый статический IP, сделан проброс портов, локально на MAMP все работает, а по внешнему IP не зайти. Хотел сделать доступмым сайт из MAMP, правил httpd.conf. Но видимо придется использовать веб сервер Apache MacOS.

  9. Maxon4ik:

    проблема ну прям вообще не понятная! имеется сервер на ubuntu 20.04, nginx 1.17.10…. пытаюсь настроить SSL от Letsencrypt…и все как бы настраивается… в итоге:

    1. внутри локальной сети могу перейти на https://exemple.com, а с любого другого устройства не в локалке-не получается

    2. если удалить SSL то сайт становится видным в глобальном инете. но по http, а это прям не здорово! в какую сторону уже копать прям не знаю!

    • Alexey:

      Этот вопрос хоть как-то связан с темой данной статьи?

      К тому же, чтобы можно было помочь, нужно указывать конкретные ошибки и сделанные в файлах конфигурации настройки.

      На вашу проблему «чего-то там не работает», могу только ответить «сделайте что-нибудь».

  10. Сергей:

    Здравствуйте, есть ли возможность достучаться до веб-сервера за NAT, если провайдер согласится пробросить несколько портов из из диапазона > 10000?

    • Alexey:

      Приветствую! В теории, да, это будет работать. Но для примера посмотрите на этот скриншот трассировки маршрута: сетевой пакет проходит через 6 локальных IP адресов провайдера — 3 из них показаны (10.10.31.*), а ещё три не удалось увидеть. Так вот, вместо того, чтобы пробрасывать порты через все свои локальные роутеры, провайдер просто предложит арендовать внешний IP адрес.

      К тому же, подумайте сами, при проброске портов ваш веб сервер будет доступен только по адресу вида IP:НОРМЕР_ПОРТА. То есть по номеру порта. При таких условиях, вы, например, не сможете нормально прописать IP адрес домена в DNS записях (там не указывается номер порта).

      Итого: с технической точки зрения это возможно. Но на практике это никто не будет делать, поскольку это конченое наркоманство.

      Кстати, по сегодняшним ценам аренда внешнего IP это довольно недорого. Если не удастся договориться о приемлемой цене с Интернет-провайдером, всегда можно арендовать VDS сервер, у которого 1 внешний IP входит в обязательный комплект. Ну и дополнительно не нужно беспокоиться о бесперебойном питании и прочем.

  11. Влад:

    Здравствуйте.Спасибо за ваши знания,которыми делитесь на страницах ресурсов (hackware,kali и т.д)Не знаю,какие вы заборы поставили,но в последнее время доступ из оперы мини к ним закрыт.Вы уж поправьте,а то многих читателей потеряете…

    • Alexey:

      Здравствуйте! Спасибо, что обратили внимание на проблему. Сейчас должно работать.

  12. Таня:

    Статья супер. Приятно видеть свой сайт через другие компы в своей локальной сети 

  13. den:

    Здравствуйте. Я уже совсем запутался с этими статическими ип адресами игде их можно взять.

    Может кто подскажет. Как из своего динамического адреса сделать стачический. Если я куплю выделенный сервер смогу ли я сделать ип адрес сервера своим стачическим адресом своего компьютера. Спасибо.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *