Nginx vHosts Manager
Скрипт для управления виртуальными хостами Nginx'a, основан на dialog.
Его функционал аналогичен программе a2ensite для Apache, т.е. подключение и отключение конфигурационных файлов виртуальных хостов.
Задача скрипта переименовывать файлы *.conf в *.off и наоборот, тем самым отключая или включая конфиги хостов.
Настройка
Создаем папку где будут хранится конфиги
mkdir /etc/nginx/vhosts.d
Подключаем файлы с расширением *.conf
/etc/nginx/nginx.conf
... ## Подключение конфигов include /etc/nginx/vhosts.d/*.conf;
Копируем скрипт в файл и делаем его выполняемым
chmod +x /usr/sbin/nginx-vhm
Так же в самом скрипте можно настроить переменные
Листинг
#!/bin/bash ############################################################################### # Настройки ############################################################################### ### !!! Директории слешами НЕ закрывать !!! NGINX_VHOSTS_DIR="/etc/nginx/vhosts.d" # !!! Наличие точки обязательно. Точка экранирована FILEON="\.conf" FILEOFF="\.off" ############################################################################### BACKTITLE=" Nginx vHosts Manager " NGINX_BIN="/usr/sbin/nginx" NGINX_CMD="/etc/init.d/nginx reload" # Создание временного файл FILETEMP=`mktemp 2>/dev/null` # Обработка прерываний. Удаление файла. trap "rm -f $FILETEMP" 0 1 2 5 15 ############################################################################### # Функции ############################################################################### ### Функция получения списка для меню function f_list { # Получение списка файлов, проверка, разделение имени от расширения. FILELIST=`ls -l ${NGINX_VHOSTS_DIR} | grep ^- | awk '{print $9}' | sed -e '/\(^.*\)\('${FILEON}'$\|'${FILEOFF}'$\)/!d' | sed -e 's/\(^.*\)\('${FILEON}'$\|'${FILEOFF}'$\)/\1 \2/g'` # Замена расширения, сортировка FILELIST=`echo "${FILELIST}" | sed -e 's/\(^.*\) \('${FILEON}'\)$/\1 ON/g' | sed -e 's/\(^.*\) \('${FILEOFF}'\)$/\1 OFF/g'` # Сортировка FILELIST=`echo "${FILELIST}" | sed -e '/\(^.*\) \(ON\)$/!d' | sort && echo "${FILELIST}" | sed -e '/\(^.*\) \(OFF\)$/!d' | sort` # Проверка на пустоту if [[ "${FILELIST}" == "" ]]; then d_memu_info "::=> Configuration files not found:${NGINX_VHOSTS_DIR} \n::=> Critical exit: $BASH_SOURCE line:$LINENO" exit 1 fi # Проверка на двойные файлы if [[ `echo "${FILELIST}" | wc -l` != `echo "${FILELIST}" | awk '{print $1}' | sort -u | wc -l` ]]; then d_memu_info "::=> Duplicate files with ON/OFF \n::=> Critical exit: $BASH_SOURCE line:$LINENO" exit 1 fi } ### Функция переименования function f_rename () { if [[ `echo "${FILELIST}" | sed -e '/\(^'$1'\) \(ON\)$/!d'` != "" ]]; then # Выключение mv ${NGINX_VHOSTS_DIR}/${1}${FILEON:1} ${NGINX_VHOSTS_DIR}/${1}${FILEOFF:1} if [ $? -ne 0 ]; then d_memu_info "::=> Can not rename ${NGINX_VHOSTS_DIR}/${1}${FILEON:1} to ${NGINX_VHOSTS_DIR}/${1}${FILEOFF:1} \n::=> Critical exit: $BASH_SOURCE line:$LINENO" exit 1 fi elif [[ `echo "${FILELIST}" | sed -e '/\(^'$1'\) \(OFF\)$/!d'` != "" ]]; then # Включение mv ${NGINX_VHOSTS_DIR}/${1}${FILEOFF:1} ${NGINX_VHOSTS_DIR}/${1}${FILEON:1} if [ $? -ne 0 ]; then d_memu_info "::=> Can not rename ${NGINX_VHOSTS_DIR}/${1}${FILEON:1} to ${NGINX_VHOSTS_DIR}/${1}${FILEOFF:1} \n::=> Critical exit: $BASH_SOURCE line:$LINENO" exit 1 fi else d_memu_info "::=> Critical exit: $BASH_SOURCE line:$LINENO" exit 1 fi } ### Главное меню function d_menu_main () { f_list dialog --clear \ --backtitle "${BACKTITLE}" \ --title " List of configuration files " \ --ok-label "Edit" --cancel-label "Exit" --defaultno \ --extra-button --extra-label "ON/OFF" \ --menu "${NGINX_VHOSTS_DIR}" 0 0 0 \ ${FILELIST} 2> $FILETEMP RETURN=$? d_actions_menu_main } ### Функции главного меню function d_actions_menu_main { case ${RETURN} in 0) # Ok f_edit `cat $FILETEMP` if [ $? -eq 88 ]; then d_memu_reload fi d_menu_main ;; 1) # Cancel echo "Exit" exit 0 ;; 3) # Extra f_rename `cat $FILETEMP` d_memu_reload d_menu_main ;; 255) # Esc echo "Esc" exit 0 ;; esac } ### Открыть редактор function f_edit () { if [[ `echo "${FILELIST}" | sed -e '/\(^'$1'\) \(ON\)$/!d'` != "" ]]; then $EDITOR ${NGINX_VHOSTS_DIR}/${1}${FILEON:1} return 88 elif [[ `echo "${FILELIST}" | sed -e '/\(^'$1'\) \(OFF\)$/!d'` != "" ]]; then $EDITOR ${NGINX_VHOSTS_DIR}/${1}${FILEOFF:1} else d_memu_info "::=> Critical exit: $BASH_SOURCE line:$LINENO" exit 1 fi } ### Меню restart function d_memu_reload () { dialog --clear \ --backtitle "${BACKTITLE}" \ --defaultno \ --yesno "Reload Nginx?" 0 0 RETURN=$? d_actions_menu_reload } ### Функции меню reload function d_actions_menu_reload { case ${RETURN} in 0) # Ok NGINX_MSG=`2>&1 ${NGINX_BIN} -t && ${NGINX_CMD}` d_memu_info "${NGINX_MSG}" ;; esac } ### Меню info function d_memu_info () { dialog --backtitle "${BACKTITLE}" \ --msgbox "$1" 30 150 } ############################################################################### # Сценарий http://wiki.enchtex.info # ############################################################################### if [ "$UID" -ne 0 ]; then d_memu_info "::=> Requires root privileges \n::=> Critical exit: $BASH_SOURCE line:$LINENO" exit 1 fi if [ ! -d ${NGINX_VHOSTS_DIR} ]; then d_memu_info "::=> Directory does not exist:${NGINX_VHOSTS_DIR} \n::=> Critical exit: $BASH_SOURCE line:$LINENO" exit 1 fi d_menu_main exit 0
Обсуждение