Как включить и отключить сайт с помощью a2ensite и a2dissite на Red Hat?

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

Я вошел на сервер с Linux. Думаю, это дистрибутив Red Hat.

Команды a2ensite и a2dissite недоступны.
В директории /etc/httpd я не вижу никакого упоминания о sites-enabled или sites-available.

Я почти уверен, что сайт в настоящее время выполняет директивы из /etc/httpd/conf.d/ssl.conf. Я хотел бы выполнить a2dissite ssl, а затем перезагрузить веб-сервер. Как этого добиться?

a2ensite и т.д. — это команды, доступные в системах на базе Debian, и которые недоступны в дистрибутивах на базе RH.

Что они делают — это управляют символическими ссылками от частей конфигурационных файлов в /etc/apache2/sites-available и mods-available к /etc/apache2/sites-enabled и так далее. Например, если у вас есть виртуальный хост, определенный в конфигурационном файле /etc/apache2/sites-available/example.com, команда a2ensite example.com создаст символическую ссылку на этот файл в /etc/apache2/sites-enabled и перезагрузит конфигурацию apache. Главный конфигурационный файл Apache содержит строки, которые включают каждый файл в /etc/apache2/sites-enabled, и таким образом они включаются в конфигурацию во время выполнения.

Довольно легко создать подобную структуру в RHEL. Добавьте две директории в /etc/httpd/, названные sites-enabled и sites-available, и добавьте ваши виртуальные хосты в файлы в sites-available. После этого добавьте строку

include ../sites-enabled 

в /etc/httpd/conf/httpd.conf. Теперь вы можете создать символические ссылки на sites-enabled, а затем перезагрузить конфигурацию с помощью service httpd reload или apachectl.

В дополнение к отличному ответу Свена, два скрипта, которые имитируют поведение a2ensite и a2dissite. Оригинальный ensite.sh можно найти на Github.

a2ensite.sh

#!bin/bash
# Включить сайт, точно так же, как команда a2ensite.

SITES_AVAILABLE_CONFIG_DIR="/etc/httpd/sites-available";
SITES_ENABLED_CONFIG_DIR="/etc/httpd/sites-enabled";

if [ $1 ]; then
  if [ -f "${SITES_ENABLED_CONFIG_DIR}/${1}" ]; then
    echo "Сайт ${1} уже был включен!";
  elif [ ! -w $SITES_ENABLED_CONFIG_DIR ]; then
    echo "У вас нет разрешения на это. Попробуйте запустить команду от имени root."
  elif [ -f "${SITES_AVAILABLE_CONFIG_DIR}/${1}" ]; then
    echo "Включение сайта ${1}...";
    ln -s $SITES_AVAILABLE_CONFIG_DIR/$1 $SITES_ENABLED_CONFIG_DIR/$1
    echo "готово!"
 else
   echo "Сайт не найден!"
fi
else
  echo "Пожалуйста, укажите имя сайта, который нужно включить."
fi

a2dissite.sh

#!bin/bash
# Отключить сайт, точно так же, как команда a2dissite, от Apache2.

SITES_AVAILABLE_CONFIG_DIR="/etc/httpd/sites-available";
SITES_ENABLED_CONFIG_DIR="/etc/httpd/sites-enabled";

if [ $1 ]; then
  if [ ! -f "${SITES_ENABLED_CONFIG_DIR}/${1}" ]; then
    echo "Сайт ${1} уже был отключен!";
  elif [ ! -w $SITES_ENABLED_CONFIG_DIR ]; then
    echo "У вас нет разрешения на это. Попробуйте запустить команду от имени root."
  elif [ -f "${SITES_AVAILABLE_CONFIG_DIR}/${1}" ]; then
    echo "Отключение сайта ${1}...";
    unlink $SITES_ENABLED_CONFIG_DIR/$1
    echo "готово!"
  else
    echo "Сайт не найден!"
  fi
else
  echo "Пожалуйста, укажите имя сайта, который нужно отключить."
fi

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

Как управлять сайтами в Red Hat: отключение и включение конфигураций

Если вы работаете с Apache на дистрибутиве Red Hat, вы могли заметить, что команды a2ensite и a2dissite отсутствуют. Эти команды предназначены для управления сайтами в Debian-подобных системах и позволяют легко включать и отключать конфигурации виртуальных хостов с помощью символических ссылок. В данной статье мы рассмотрим, как добиться аналогичного результата в Red Hat и его производных, а также предоставим отдельные скрипты для удобства работы.

Почему a2ensite и a2dissite отсутствуют?

В Red Hat Apache хранит конфигурации виртуальных хостов несколько иначе. Все настройки находятся в каталоге /etc/httpd/conf.d/, и для управления ими недостаточно простого создания символических ссылок. В этом случае лучше всего создать две новые директории: sites-available и sites-enabled.

Шаги для создания структуры конфигураций

  1. Создайте необходимые директории:

    sudo mkdir /etc/httpd/sites-available
    sudo mkdir /etc/httpd/sites-enabled
  2. Редактируйте главный конфигурационный файл Apache:
    Откройте файл /etc/httpd/conf/httpd.conf и добавьте следующую строку, чтобы включить все конфигурации из sites-enabled:

    IncludeOptional sites-enabled/*.conf
  3. Создайте виртуальный хост:
    Вы можете создать файл конфигурации для вашего виртуального хоста в директории sites-available. Например, создать файл /etc/httpd/sites-available/ssl.conf:

    <VirtualHost *:443>
       ServerName example.com
       DocumentRoot /var/www/html/example
       SSLEngine on
       SSLCertificateFile /etc/ssl/certs/example.crt
       SSLCertificateKeyFile /etc/ssl/private/example.key
    </VirtualHost>
  4. Символьные ссылки в директорию sites-enabled:
    Чтобы активировать сайт, создайте символическую ссылку:

    sudo ln -s /etc/httpd/sites-available/ssl.conf /etc/httpd/sites-enabled/ssl.conf

Отключение сайта

Если вы хотите отключить сайт, просто удалите символическую ссылку из sites-enabled:

sudo unlink /etc/httpd/sites-enabled/ssl.conf

Перезагрузка Apache

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

sudo systemctl reload httpd

или

sudo apachectl graceful

Скрипты для удобства работы

Для автоматизации процессов включения и отключения сайтов, вы можете использовать следующие скрипты.

Скрипт для включения сайта (a2ensite.sh):

#!/bin/bash
SITES_AVAILABLE_CONFIG_DIR="/etc/httpd/sites-available"
SITES_ENABLED_CONFIG_DIR="/etc/httpd/sites-enabled"

if [ "$1" ]; then
  if [ -f "${SITES_ENABLED_CONFIG_DIR}/$1" ]; then
    echo "Сайт $1 уже включен!"
  elif [ ! -w "$SITES_ENABLED_CONFIG_DIR" ]; then
    echo "У вас нет прав для выполнения этой операции. Попробуйте запустить команду от имени root."
  elif [ -f "${SITES_AVAILABLE_CONFIG_DIR}/$1" ]; then
    echo "Включение сайта $1..."
    ln -s "${SITES_AVAILABLE_CONFIG_DIR}/$1" "${SITES_ENABLED_CONFIG_DIR}/$1"
    echo "Готово!"
  else
    echo "Сайт не найден!"
  fi
else
  echo "Укажите название сайта для включения."
fi

Скрипт для отключения сайта (a2dissite.sh):

#!/bin/bash
SITES_AVAILABLE_CONFIG_DIR="/etc/httpd/sites-available"
SITES_ENABLED_CONFIG_DIR="/etc/httpd/sites-enabled"

if [ "$1" ]; then
  if [ ! -f "${SITES_ENABLED_CONFIG_DIR}/$1" ]; then
    echo "Сайт $1 уже отключен!"
  elif [ ! -w "$SITES_ENABLED_CONFIG_DIR" ]; then
    echo "У вас нет прав для выполнения этой операции. Попробуйте запустить команду от имени root."
  elif [ -f "${SITES_AVAILABLE_CONFIG_DIR}/$1" ]; then
    echo "Отключение сайта $1..."
    unlink "${SITES_ENABLED_CONFIG_DIR}/$1"
    echo "Готово!"
  else
    echo "Сайт не найден!"
  fi
else
  echo "Укажите название сайта для отключения."
fi

Заключение

Управление конфигурациями виртуальных хостов в Red Hat может быть менее удобным по сравнению с Debian-подобными дистрибутивами, однако с помощью простых действий и создания скриптов, вы можете эффективно управлять сайтами на вашем сервере. Придерживайтесь вышеуказанных рекомендаций, и процессы включения и отключения сайтов станут для вас проще и быстрее.

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

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