Порой бывает удобно, чтобы ваш интернет ресурс был доступен как из локальной сети, так и из интернета одновременно. Давайте попытаемся описать, каким образом настраивается веб-сервер для этого.
В моем случае таким ресурсом был сервер дистанционного образования, а именно Moodle - программный продукт на базе Apache, использующий PHP и какую-либо разновидность SQL (как правило, MySQL) - открытая платформа для создания курсов и сайтов, базирующихся в интернете. На настраиваемой машине должно быть не менее двух сетевых интерфейсов: для сети внутренней локальной и для внешней (интернета).
Необходимо было сначала установить php и mysql, затем сам moodle. В принципе, для работы в локальной сети (интранете) сервер готов. Для того, чтобы он работал в интернете, необходимо открыть 80 порт на роутере и поменять в конфигурационном файле config.php строку
$CFG->wwwroot = "http://your_local_moodle_host_name;
на
$CFG->wwwroot = "http://your_real_internet_domain_name;
Если сделать только первый шаг, то сайт действительно появится в сети, но все ссылки в нем будут на локальный web-ресурс. После того, как выполнен второй шаг, сайт в интернете работает правильно, но в локальной сети работать перестает - все ссылки в нем на внешний ресурс.
Решить данную проблему можно несколькими способами: либо с помощью локального DNS переопределять имя/ip-адрес хоста как внутренний ресурс и посылать все запросы к нему, либо каким-то образом, сделать динамическим название хоста в ссылке, либо создать в apache виртуальные хосты с одним и тем же ip-адресом и несколькими псевдонимами для полной независимости... и так далее - способов множество. Решение оказалось довольно простым. Если отталкиваться от формулировки проблемы как проблемы неправильной генерации ссылок, то помогает правильное переопределением названия хоста в конфигурационном файле config.php сайта:
$CFG->wwwroot = "http://".$_SERVER["HTTP_HOST"];
$_SERVER - суперглобальный массив, в который PHP-интерпретатор помещает переменные, полученные от сервера. Без данных переменных сложно организовать полноценную поддержку Web-приложений. В элементе $_SERVER['HTTP_HOST'] содержится имя сервера, которое, как правило, совпадает с доменным именем сайта, расположенного на сервере. В параметре приводится лишь доменное имя без названия протокола (источник -
php.su)
Таким образом, php-машина для каждого конечного пользователя, при обращении браузера к сайту, формирует страницу персонально и тот самый wwwroot для каждого пользователя свой. Например: пользователь грузит страницу из интернета - загружаются данные с www.my_moodle_host.ru; грузит страницу из локальной сети, которой принадлежит этот сайт - грузится my_moodle_host - доменное имя машины в данной сети. Так же заменяются ip-адреса. Если пользователь набрал в строке браузера 85.156.48.70 - выделенный ip-адрес, назначенный данному серверу в глобальной сети, то, пройдя, например, к странице аутентификации, в строке адреса браузера он увидит что-то наподобие
http://85.156.48.70/login.php.
В вышеописанном случае я настроил нужный режим работы системы не прибегая к сторонним методам, а пользуясь только настройками среды. Если кто-то сталкивался с подобной проблемой, мне интересно будет узнать другие способы ее решения. Прошу отписывать в комментариях :)
You need to be a member of Open Source University Meetup to add comments!
Join this social network