Сделать apache доступным только через 127.0.0.1, это возможно?

19

Я настроил свой сервер Apache, и PHP / MySQL работает хорошо!

Но вопрос в том, как мне сохранить это в тайне, так как это сервер только для разработки? Единственная причина, по которой контент остается закрытым, заключается в том, что если скрипт вышел из строя, я не хочу, чтобы ошибки Apache отображались, если он стал общедоступным сайтом (и тот факт, что другие тоже используют одну и ту же сеть!), И я меньше скорее всего, я буду использовать мой ПК в качестве веб-хостинга - я с большей вероятностью пойду, используя маршрут провайдера веб-хостинга для реального живого сайта.

В настоящее время я могу получить к нему доступ тремя способами:

  • http: // localhost (или http://127.0.0.1 , альтернативный способ и IP-адрес localhost, но в любом случае приемлемо для меня!)

  • http 192.168.0.1 (IP моего роутера)

  • http pc-name-here (имя моего ПК, очевидно, это зависит от ПК с Windows!)

[примечание: нельзя публиковать ссылки, поэтому для двух других вам нужно будет вставить двоеточие / прямую косую черту, как в первом].

Однако я хочу получить к нему доступ только через первый. Он прослушивает порт 80 (и я не хочу это менять). Это невозможно или я ошибаюсь? Я знаю немного больше о PHP / веб-дизайне, чем о сетевых аспектах, так что это первое для меня!

По сути, я хочу, чтобы он был доступен только через localhost на этой машине, а не через внешний IP-адрес или 192.168.0.1.

Нужно ли мне редактировать httpd.conf и использовать deny на каждом сайте тестирования, или есть какое-то другое решение?

Пример:

<Directory /www/vhosts/localhost/>
    Options All
    AllowOverride All
    order allow,deny
    allow from 127.0.0.1
            deny from 192.168.0.1
            deny from my-pc-name
</Directory>
  • это пример, но я не уверен, что здесь правильно или неправильно!

Моя операционная система - Windows 7 Ultimate.

Я действительно посмотрел в сети, но некоторые из них показались мне немного техническими.

Чтобы вы посоветовали?

linthurst53
источник

Ответы:

34

Самый простой способ сделать это - через Listenдирективу. По умолчанию в нашем httpd.conf есть строка, которая гласит:

Listen *:80

Это означает, что он будет отвечать на запросы через порт 80 на все сетевые адреса вашего компьютера. Меняя это на:

Listen 127.0.0.1:80

Apache будет указывать только отвечать на запросы локального адаптера, игнорируя при этом все остальное.

SmallClanger
источник
12

Опция прослушивания, вероятно, лучше, но, как FYI, вы можете сделать это, используя allow / deny, как это

<Directory /www/vhosts/localhost/>
    Options All
    AllowOverride All
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Directory>

Order deny,allowговорит Apache «Запретить все запросы, если они специально не разрешены» ( Order allow,denyнапротив, IE разрешает все запросы, если они не заблокированы специально)
Deny from all, аналогично тому, Order deny,allowчто он будет блокировать все запросы со всех IP-адресов, если вы специально не откроете их. Это , кажется, общая практика , чтобы использовать как Order deny,allowи , Deny from allно я не уверен на 100% , почему , когда они оба делают то же самое
Allow from 127.0.0.1говорит : «Разрешить все запросы от 127.0.0.1». 127.0.0.1 отобразится на localhost, поэтому вы можете использовать http://127.0.0.1/ или http: // localhost /, и это будет разрешено

Это послужит ошибкой 403 (Запрещено) любому, кто запрашивает сайт на localhost.

Некоторые другие полезные вещи;
Allow from 192.168.0.разрешит запрос от кого-либо в вашей сети (при условии, что ваша сеть - 192.168.0.0-192.168.0.255)
Правила разрешения / запрета обрабатываются по порядку, поэтому

Deny from 192.168.0.2
Allow from 192.168.0.2

позволит запросы и

Allow from 192.168.0.2
Deny from 192.168.0.2

будет отклонять запросы от 192.168.0.2

Так

Deny from 192.168.0.2
Allow from all

Позволит запросы от 192.168.0.2, даже если это было специально отклонено.

Вы также можете использовать правила Разрешить / Запретить в файлах .htaccess или для каждого каталога.

мазаться
источник
Будьте осторожны: «Приказ отказать, разрешить», а не «Приказ разрешить, отказать». Часто крошечная ошибка, которую люди постоянно совершают.
Скотт Чу
3

Я внес изменения в ports.conf в / etc / apache2, чтобы каждая ссылка на Listen to port прослушивала только localhost. Другие файлы, похоже, не имеют команды прослушивания. После перезапуска apache эти изменения, казалось, дали желаемый эффект.

/etc/apache2/ports.conf

NameVirtualHost *:80
########################## Listen 80
Listen 127.0.0.1:80

<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
###############################Listen 443
Listen 127.0.0.1:443
</IfModule>

<IfModule mod_gnutls.c>
##################################Listen 443
Listen 127.0.0.1:443
</IfModule>
Мэтью Пит
источник