Метод postinst для остановки прослушивания apache на порту 80

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

В моей работе есть ряд внутренних инструментов, которые Depends: apache2. Ни один из них не использует порт 80. Все они устанавливаются следующим образом:

  • Depends: apache2
  • Разворачивают сайт (например, /var/www/foo/index.html)
  • Разворачивают конфигурацию сайта (например, /etc/apache2/sites-available/foo.conf)
  • Активируют эту конфигурацию через postinst (например, /usr/sbin/a2ensite foo)

Теперь я хотел бы развернуть инструмент без apache, который использует порт 80. К сожалению, apache поставляется с сайтом по умолчанию (000-default.conf), который обслуживает страницу по этому порту. Поэтому я хотел бы сделать следующее в моем postinst:

[ -e /usr/sbin/a2query ] && \
  /usr/sbin/a2query -s 000-default && \
  /usr/sbin/a2dissite 000-default && \
  systemctl reload apache2

Это действительно отключает сайт, но lsof -i TCP | grep :http все еще показывает, что apache2 связан с портом 80. Директива Listen 80 фактически находится вне конфигурации сайта, в /etc/apache2/ports.conf.

Насколько я знаю, это выходит за рамки любых инструментов a2*.

Есть ли хороший способ отвязать apache от порта 80?

Некрасивое решение — добавить это в postinst, но я обычно не люблю редактировать конфигурации сайтов через скрипты.

sed -i 's/^Listen 80/# Listen 80/' /etc/apache2/ports.conf

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

Ваша задача — сделать так, чтобы Apache больше не прослушивал порт 80, тем самым освобождая его для другого инструмента, который не использует Apache. Это необходимо, поскольку Apache по умолчанию закрепляет этот порт посредством директивы Listen 80, которая находится в файле /etc/apache2/ports.conf. Учитывая контекст вашей задачи, давайте рассмотрим, как это можно безопасно реализовать в процессе установки (postinst).

Разбор Основных Шагов

  1. Отключение Стандартного Сайта Apache:

    • Использование /usr/sbin/a2dissite 000-default для отключения стандартного сайта — верный шаг. Это отключает зависимости на уровне конфигурации сайта, но не решает проблему самого закрепления порта.
  2. Изменение Конфигурационного Файла для Порта:

    • Хотя изменение конфигурационного файла с помощью sed действительно «уродливое» решение, оно приносит нужные результаты. Использование скрипта для редактирования является неподходящим методом из-за возможных конфликтов с обновлениями или другими скриптами.

Рекомендуемое Решение

Использование Файлов Конфигурации Apache

  1. Настройка /etc/apache2/ports.conf Без Прямого Редактирования:

    • Вместо прямого редактирования предлагаем создать новый конфигурационный файл или использовать существующий ваш собственный файл в каталоге sites-available с директивой для добавления нужных нам настроек.
  2. Добавление новой конфигурации:
    Создайте новый файл конфигурации /etc/apache2/conf-available/custom-port-config.conf:

    # отключаем прослушивание порта 80
    Listen 8080
    • Это освобождает порт 80 и меняет его на 8080, или другой порт, который вам нужен.
  3. Включение новой конфигурации:

    [ -e /usr/sbin/a2enconf ] && /usr/sbin/a2enconf custom-port-config
    systemctl reload apache2

Конечный Скрипт postinst

Создайте файл /etc/postinst со следующим содержанием:

#!/bin/bash
# Отключение дефолтного конфигурационного файла
[ -e /usr/sbin/a2query ] && /usr/sbin/a2query -s 000-default && /usr/sbin/a2dissite 000-default

# Создание кастомной конфигурации
if [ ! -f /etc/apache2/conf-available/custom-port-config.conf ]; then
    echo -e "# отключаем прослушивание порта 80\nListen 8080" > /etc/apache2/conf-available/custom-port-config.conf
fi

# Включение кастомной конфигурации
[ -e /usr/sbin/a2enconf ] && /usr/sbin/a2enconf custom-port-config

# Перезагрузка Apache для применения изменений
systemctl reload apache2

Заключение

Это решение позволяет избежать возможности конфликтов по мере обновлений системы и поддерживает гибкость внесения новых изменений. Оно соответствует современным стандартам конфигурирования системы и помогает в упрощении процессов за счет использования возможностей, предоставляемых самой архитектурой Apache.

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

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