Apache перенаправляет определенный URL или субдомен на внутренний IP.

Вопрос или проблема

У меня есть сервер GitLab рядом с моим веб-сервером, работающим в домашней сети. На моем веб-сервере работает Apache2 с несколькими доменами. Один из них – example.com. Теперь моя цель состоит в том, чтобы пользователь получал страницу входа в GitLab, посещая что-то вроде example.com/gitlab или gitlab.example.com. На самом деле, мне не важно, происходит ли перенаправление с определенного URL или подсайта. Я уже попробовал довольно много, но ничего из этого не сработало для меня (возможно, я всегда делал это неправильно).

Я также читал некоторые связанные сообщения в форумах, такие как

Но у меня не получилось ничего запустить.

Мой default.conf настроен так, что он всегда перенаправляет порт 80 на порт 443 (HTTPS).

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com

    Redirect permanent / https://www.example.com/
    [...]
</VirtualHost>

Итак, вот мой example.com.conf до:

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /var/www/html/example.com

    SSLEngine on

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
    </Directory>

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
</VirtualHost>

Сначала я попробовал перенаправление с определенного URL. Я добавил:

ProxyRequests Off
ProxyPass /gitlab http://192.168.0.115:80/
ProxyPassReverse /gitlab http://192.168.0.115:80/

Это не сработало полностью, но если я ввожу URL, я получаю “404 Запрашиваемый URL /users/sign_in не найден на этом сервере”. ‘/users/sign_in’ – это путь к странице входа на моем сервере GitLab, так что, по крайней мере, что-то, кажется, работает. Странно, что это работает, если я перенаправляю корневую директорию на мой внутренний IP:

ProxyRequests Off
ProxyPass / http://192.168.0.113:80/
ProxyPassReverse / http://192.168.0.113:80/

Это работает, но теперь я больше не могу получить доступ к своему фактическому сайту.

Затем я попробовал перенаправление с подсайта. Я добавил:

<VirtualHost *:443>
    ServerName gitlab.example.com

    ProxyPass / http://192.168.0.113/
    ProxyPassReverse / http://192.168.0.113/
</VirtualHost>

Но я получаю “Вебсайт недоступен”. Я даже не могу запустить подсайт.

Возможно, нужно использовать mod_rewrite, чтобы убрать часть /gitlab. Что-то вроде:

rewriteBase "/gitlab"
rewriteRule "^gitlab/(.*)" "http:/192.168.0.113/$1" [P]

Смотрите https://httpd.apache.org/docs/2.4/rewrite/proxy.html

Ответ или решение

Чтобы перенаправить определённый URL или поддомен на внутренний IP-адрес вашего GitLab сервера в Apache, вам нужно уверенно настроить прокси и, возможно, использовать модуль mod_rewrite, чтобы корректно обработать пути. Вот пошаговое руководство по реализации вашего запроса.

Шаг 1: Убедитесь, что у вас включены необходимые модули

Для работы прокси необходимо включить следующие модули Apache:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod rewrite

После этого перезапустите Apache:

sudo systemctl restart apache2

Шаг 2: Настройка перенаправления через определённый URL

Если вы хотите перенаправить пользователей на example.com/gitlab, добавьте следующий фрагмент к вашему конфигу example.com.conf:

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /var/www/html/example.com

    SSLEngine on
    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem

    # Настройка прокси для gitlab
    ProxyRequests Off
    ProxyPass /gitlab http://192.168.0.115/  # IP вашего GitLab сервера
    ProxyPassReverse /gitlab http://192.168.0.115/

    # Дополнительно, для корректной работы путей
    RewriteEngine On
    RewriteRule ^/gitlab/(.*) http://192.168.0.115/$1 [P,L]
</VirtualHost>

Данная конфигурация сообщает Apache перенаправлять запросы, которые начинаются с /gitlab, на внутренний сервер GitLab по IP-адресу 192.168.0.115.

Шаг 3: Настройка перенаправления через поддомен

Если вы хотите использовать поддомен, например, gitlab.example.com, созданные для него настройки в вашем конфиге Apache могут выглядеть так:

<VirtualHost *:443>
    ServerName gitlab.example.com

    # Настройка прокси для поддомена
    ProxyRequests Off
    ProxyPass / http://192.168.0.115/  # IP вашего GitLab сервера
    ProxyPassReverse / http://192.168.0.115/

    RewriteEngine On
    RewriteRule ^/(.*) http://192.168.0.115/$1 [P,L]
</VirtualHost>

Шаг 4: Перезагрузка Apache

Не забудьте перезапустить Apache после внесения изменений:

sudo systemctl restart apache2

Полезные советы

  1. Проверка конфигурации: После редактирования конфигурационных файлов всегда полезно проверять их на ошибки:

    sudo apachectl configtest
  2. Логи ошибок: Если что-то не работает, проверьте логи ошибок Apache, чтобы получить дополнительную информацию.

    tail -f /var/log/apache2/error.log
  3. Проверка доступности: Убедитесь, что сервер с IP 192.168.0.115 доступен из сети, где находится ваш веб-сервер.

  4. HTTPS: Убедитесь, что всё корректно работает по HTTPS, особенно, если вы используете Let’s Encrypt.

Следуя этим шагам, вы сможете успешно настроить перенаправление на ваш GitLab сервер, независимо от того, используете ли вы определённый URL или поддомен.

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

Капча загружается...