С недавних пор пришлось озаботиться доступом к сайтам на локалхосте из локальной сети. Кому-то эго потешить, кому-то дать доступ к внутрикорпоративному порталу, кому-то просто, чтобы дома можно было работать не только за одним компьютером.
Итак, поехали.
Будем считать, что у нас есть сайт на виртуальном хосте. Например,, пусть это будет site.loc. Также даны два компьютера — один под Open SUSE (Apache2 + PHP + MySQL, IP: 192.168.0.100, например), второй — под WinXP (пусть это будет ноутбук, если кому-то интересно). Мне нужно, чтобы я мог зайти в phpMyAdmin и работать с админкой site.loc c ноутбука. Ну, или просто посмотреть из-под винды, как оно будет выглядеть 🙂
Настроим сеть
Для начала, на компьютере, откуда хотим получить доступ (в нашем случае, с WinXP), открываем файл C:/Windows/System32/drivers/etc/hosts и добавляем строчку после 127.0.0.1:
192.168.0.100 site.loc
Сохраняем файл. что тут написано — при наборе адреса «site.loc» идти на IP «192.168.0.100«. Это вместо того, чтобы поднимать DNS ради одного-двух-пяти сайтов.
Если второй компьютер на Linux — файл будет /etc/hosts, действия — те же.
phpMyAdmin
Если с phpMyAdmin все относительно просто — пишем http://192.168.0.100/phpMyAdmin (регистр тут важен) и все открывается, то с виртуальными хостами придется расковырять пару файлов.
Виртуальные хосты
site.loc, соответственно, живет на виртуальном хосте, который прописан так:
sudo nano /etc/apache2/vhosts.d/site.loc.conf <VirtualHost 127.0.0.1:80> DocumentRoot /srv/www/vhosts/site.loc ServerName site.loc ServerAdmin mail@ya.ru <Directory /srv/www/vhosts/site.loc> AllowOverride All Order allow,deny Allow from all </Directory> UserDir public_html </VirtualHost>
Все прекрасно работает на локалхосте, но при попытке зайти на site.loc cо второго компьютера, нас ждет облом. Откроется страница, находящаяся в папке WWW (по умолчанию там будет написано «It worws!«). Вот тут-то мы и начинаем.
Для начала, апачу нужно сказать, какие порты слушать и на каких интерфейсах (он же не телепат, правильно?). Открываем файл /etc/apache2/listen.conf и видим там нечто следующее (исключая коммментарии, конечно):
sudo nano /etc/apache2/listen.conf Listen 80 <IfDefine SSL> <IfDefine !NOSSL> <IfModule mod_ssl.c> Listen 443 </IfModule> </IfDefine> </IfDefine>
К этому всему добру надо указать апачу слушать два интерфейса — локальный (127.0.0.1), чтобы можно было смотреть сайт на локалхосте как раньше, и внешний (192.168.0.100), чтобы апач принимал запросы еще и с того интерфейса, который смотрит в локалку.
NameVirtualHost 192.168.0.100:80 NameVirtualHost 127.0.0.1:80
Можно добавить это в самый конец файла, можно в начало.
Чтобы апач слушал все интерфейсы на 80 порту — вместо того, что выше, добавляем
NameVirtualHost *:80
Этот вариант хорош именно в нашем случае, когда у нас по сути 2 интерфейса (значимых для дела) — 127.0.0.1 и 192.168.0.100
Чтобы все интерфейсы на всех портах (а надо ли?)
NameVirtualHost *
В принципе, все это описано в комментариях в этом же файле. Правда, на английском…
Теперь открываем известный нам уже файл /etc/apache2/vhosts.d/site.loc.conf и добавляем в него блок:
<VirtualHost 127.0.0.1:80> DocumentRoot /srv/www/vhosts/site.loc ServerName site.loc ServerAdmin mail@ya.ru <Directory /srv/www/vhosts/site.loc> AllowOverride All Order allow,deny Allow from all </Directory> UserDir public_html </VirtualHost>
Таким образом, должно получиться так:
sudo nano /etc/apache2/vhosts.d/site.loc.conf <VirtualHost 192.168.0.100:80> DocumentRoot /srv/www/vhosts/site.loc ServerName site.loc ServerAdmin mail@ya.ru <Directory /srv/www/vhosts/site.loc> AllowOverride All Order allow,deny Allow from all </Directory> UserDir public_html </VirtualHost> <VirtualHost 127.0.0.1:80> DocumentRoot /srv/www/vhosts/site.loc ServerName site.loc ServerAdmin mail@ya.ru <Directory /srv/www/vhosts/site.loc> AllowOverride All Order allow,deny Allow from all </Directory> UserDir public_html </VirtualHost>
Собственно, осталось перезапустить апач:
sudo /etc/init.d/apache2 restart
и проверять. Все должно работать на обоих компьютерах.
Все это конечно хорошо, но прописывать в host на 20-30 компах замучаешься…
а скрипты кто-то отменял разве? в сети из 20-30 компьютеров можно это все авторматизировать 😉
Искал долго в интернете решение проблемы и нашел вот эту статью. Спасибо автору! Но вот только есть маленькая проблема: у меня на компьютере нет файлов site.loc и site.loc.conf. Могли бы Вы помочь в данной ситуации? Заранее благодарен.
site.loc — это папка
site.loc.conf — это конфиг виртуального хоста
Конфиг виртуального хоста можно сделать или руками, или доверить это дело Yast (Сервер HTTP)
я вроде сделал руками, но видимо криво: при перезапуске апача терминал выдает ошибку
Ошибки — это хорошо. Ошибки помогают понять, где «что-то не так».
Какая ошибка? Телепаты от своей нелегкой доли спились.
Все, вроде, сделал. Но при попытке зайти на site.loc со второго компа chrome выдает ошибку: «К сожалению, Google Chrome не может открыть страницу site.loc». Проверял ping-ом: все нормально. Не подскажете, что делать?
Что пишет апач в логах?
В каких логах? access_log и error_log?
посмотрите и в тех, и в других. Чтобы вывести последние записи:
tail –f /path/to/error_log
можете по-подробнее описать, что должно быть в файле site.loc?
куда уж подробнее-то? )))
site.loc — это папка, где лежит ваш сайт.
site.loc.conf — это файл с конфигурацией вашего виртуального хоста для сайта site.loc
соответственно, с локалхоста сайт должен открываться по пути http://site.loc (loc — это вымышленный домен первого уровня, чтобы обозначить, что он локальный, чтобы не было путаницы и если например я начну делать yandex.ru — я назову его yandex.loc, чтобы браузер не ломился на внешку)
site.loc.conf должен быть тут: /etc/apache2/vhosts.d/site.loc.conf (именно тут апач хранит конфиги для виртуальных хостов)
папка site.loc может храниться где угодно, у меня она лежит в папке /srv/www/vhosts/site.loc
где она должна лежать у вас — смотрите конфиг самого Апача. Мне удобнее было смонтировать отдельный раздел под это дело и складывать все туда.
В файле site.loc.conf по умолчанию лежит конфиг, который я привел в статье. Описал, как должен выглядеть конфиг после правки.
я когда файл site.loc.conf добавляю в vhosts.d, тогда у меня и прекращает работать апач. на перезагрузку, командная строка говорит «Job failed. See system journal and ‘systemctl status’ for details.». А в логе написано «[Wed Nov 28 13:34:15 2012] [notice] caught SIGTERM, shutting down». Что делать? сейчас сам попытаюсь исправить, но надеюсь на вашу поддержку)
А вот это мне говорит командная строка на команду systemctl status:
apache2.service — apache
Loaded: loaded (/lib/systemd/system/apache2.service; enabled)
Active: failed (Result: exit-code) since Wed, 28 Nov 2012 13:39:09 +0400; 2min 51s ago
Process: 9608 ExecStop=/usr/sbin/httpd2 -D SYSTEMD -k stop (code=exited, status=0/SUCCESS)
Process: 9911 ExecStart=/usr/sbin/start_apache2 -D SYSTEMD -k start (code=exited, status=1/FAILURE)
Main PID: 6908 (code=exited, status=0/SUCCESS)
CGroup: name=systemd:/system/apache2.service
[notice] caught SIGTERM, shutting down — это сообщение информационное. Оно сообщает о том, что апач завершился.
Там же наверняка ДО этой строки есть какое-то объяснение, почему он «shutting down».
Что вы написали в site.loc.conf?
sudo nano /etc/apache2/vhosts.d/Like.loc.conf
DocumentRoot /srv/www/my_test/Like.loc/Main.html
ServerName МОЕ ДОМЕННОЕ ИМЯ
ServerAdmin МОЕ МЫЛО
AllowOverride All
Order allow,deny
Allow from all
ErrorLog /var/log/apache2/error.log
LogLevel notice
CustomLog /var/log/apache2/access.log combined
UserDir public_html
DocumentRoot /srv/www/my_test/Like.loc/Main.html
ServerName МОЕ ДОМЕННОЕ ИМЯ
ServerAdmin МОЕ МЫЛО
AllowOverride All
Order allow,deny
Allow from all
ErrorLog /var/log/apache2/error.log
LogLevel notice
CustomLog /var/log/apache2/access.log combined
UserDir public_html
Только у меня сайт не site.loc, а Like.loc. И файл conf соответственно так же называется
ErrorLog /var/log/apache2/error.log
LogLevel notice
CustomLog /var/log/apache2/access.log combined
эту часть сам добавил. Может из-за нее все проблемы?))
попробуйте в listen.conf указать не IP, a * для NameVirtualHost
Все равно не пашет(
File does not exist: /srv/www/htdocs/picture.png, referer: http://like/Main.html
А это написано до shutting down…
/srv/www/htdocs/
и
/srv/www/my_test/
ничего не напоминает?
что за my_test?
Откуда он взялся? Он вообще есть в конфиге апача?
/srv/www
это мой путь. У вас он такой же?
я создал каталог my_test в каталоге etc/www
а в my_test закинул папку с сайтом
все равно не работает(
А до внесения изменений вообще сайты какие-нибудь работали на локалхосте?
До того, как появились попытки виртуальный хост в сеть вывести, он вообще работал?
Что-то мне подсказывает, что не работало…
Да, на localhost раньше все работало…
А виртуальные хосты? Виртуальные хосты работали?
Ахаха)) Оказалось, что все дело в брандмауэре) Все исправил, ЗАРАБОТАЛО!!! Спасибо, merinovkv, Вы мне очень помогли;)
футыблин ))))
не за что 🙂 заходите еще ))
Если апач слушает на 80 порту все интерфейсы, а их по ТЗ всего 2. то делать в конф файле виртуального хоста 2 одинаковых блока, но на разные адреса особого смысла нет.
Можно написать
парсер, такой парсер!
VirtualHost *:80