У меня есть рабочий сервер apache2, на котором размещен сайт Moodle в локальной сети, доступ к которому можно получить через http://192.x.x.x/moodle
. У меня также есть сервер Linux, расположенный между Интернетом и локальной сетью с реальным IP-адресом 124.x.x.x
. Я хочу сделать сайт Moodle доступным из Интернета. Возможно ли это?
Локальный сервер apache2 имеет рабочую конфигурацию для обслуживания moodle.domain.com
. Живой сервер Linux также имеет сервер apache2, размещающий domain.com
. Оба работают под управлением Debian Linux
Я попытался выполнить перенаправление moodle.domain.com
с файла 192.x.x.x
работающего сервера Linux, /etc/hosts
но domain.com
при доступе moodle.domain.com
извне я все равно получаю то же самое.
Когда я получаю доступ извне, я сначала настраиваю файл host на ноутбуке с Windows для перенаправления moodle.domain.com
на реальный IP-адрес сервера Linux.
Что я здесь упускаю?
решение1
Мне удалось добиться работоспособности, реализовав обратный прокси-сервер Apache на работающем сервере Apache Linux.
Для тех, кто ищет такое же решение, вот фрагмент моего /etc/apache2/sites-enabled/000-default.conf
:
<VirtualHost *:80>
ServerName moodle.domain.com
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://10.5.1.100:8080/
ProxyPassReverse / http://10.5.1.100:8080/
</VirtualHost>
Локальный сервер Apache, на котором размещен сайт Moodle, должен прослушивать порт 8080
:
<VirtualHost *:8080>
ServerAdmin webmaster@local
DocumentRoot /srv/www/moodle
ServerName moodle.domain.com
ServerAlias moodle.domain.com
<Directory /srv/www/moodle>
#Allowoverride all ###Uncomment if required
</Directory>
</VirtualHost>
Еще одна настройка Moodle, которую мне нужно было настроить, — это файл конфигурации Moodle /srv/www/moodle/config.php
:
$CFG->wwwroot = 'http://moodle.domain.com';
Moodle изначально установил его $CFG->wwwroot = 'http://10.5.1.100/moodle';
во время установки. Если у вас нет установки Moodle, то проигнорируйте эту часть
решение2
Прежде чем мы начнем, я хочу убедиться, что вы понимаете, что это не самый безопасный вариант. Особенно, если открывать порты маршрутизатора, поэтому, пожалуйста, убедитесь, что вы понимаете, что такое брандмауэр.
Поскольку у вас динамический IP (я предполагаю), вы не можете просто привязать его к своему домену. Это потому, что ваш IP будет меняться каждые пару часов.
Этот ответ основан на наиболее распространенных доступных вариантах маршрутизаторов.
- Вам необходимо найти свой сервер Apache в соединениях маршрутизатора и активировать переадресацию портов (80) или, если вы понимаете, что делаете, и у вас настроен правильный брандмауэр, вы можете просто открыть все порты маршрутизатора (я настоятельно рекомендую вам не делать этого, если у вас нет брандмауэра).
- Используйте бесплатный DNS-сервис, например Dyn DNS (большинство последних маршрутизаторов поддерживают его по умолчанию, просто проверьте настройки и настройте учетную запись).
- Создайте бесплатный DNS-поддомен.
- Создайте правило DNS (CNAME) из вашего основного домена и укажите его на созданный вами поддомен dyndns. Например, moodle.example.com -> trex-moodle.exampledyndns.com.
- Настройте Apache и добавьте поддомен dyndns.
Использование бесплатного DNS на вашем маршрутизаторе — лучший вариант, поскольку ваш маршрутизатор меняет IP-адрес каждые пару часов. Если вы используете такую услугу, ваш домен DYN DNS всегда будет указывать на ваш домашний IP-адрес.
Редактировать
Что касается первого комментария, вам понадобится прокси nginx, работающий на вашем основном сервере linux. Nginx может использоваться для хостинга веб-сайта domain.com
и moodle.domain.com, который размещен на другом сервере в той же сети.
Убедитесь, что вы можете получить доступ к сайту Moodle с вашего сервера Linux. (Используйте ping IP)
Теперь в вашем nginx вам понадобится следующая конфигурация:
server {
listen 80;
server_name domain.com;
root /your/domain.com/path/goes/here ;
}
server {
listen 80;
server_name moodle.trex.com;
location / {
proxy_pass http://192.X.X.X:80; #Your apache2 server local IP address
}
}
Чтобы это работало, оба сервера Linux и ваш сервер Apache2 должны находиться в одной сети 192.XXX.