Вопрос: Команда Nginx enable site


Мы все знаем, как включить веб-сайт с помощью apache в Linux. Я уверен, что мы все согласны с использованием команды a2ensite.

К сожалению, в Nginx нет эквивалентной команды по умолчанию, но случилось так, что я установил какой-то пакет на ubuntu, который позволил мне включить / отключить сайты и перечислить их.

Проблема в том, что я не помню имя этого пакета.

Кто-нибудь знает, о чем я?

Скажите, пожалуйста, имя этого пакета и имя команды.


98
2017-09-05 08:33


Источник


Утверждение об a2ensite неверно для CentOS - Iain


Ответы:


Если вы установили nginx пакет из репозиториев Ubuntu, у вас будет два каталога.

/etc/nginx/sites-enabled а также /etc/nginx/sites-available,

В основной конфигурации nginx, /etc/nginx/nginx.conf, у вас есть следующая строка:

include /etc/nginx/sites-enabled/*.conf;

Таким образом, чтобы перечислить все доступные виртуальные хосты, вы можете запустить следующую команду:

ls /etc/nginx/sites-available

Чтобы активировать один из них, выполните следующую команду:

ln -s /etc/nginx/sites-available/www.example.org.conf /etc/nginx/sites-enabled/

Сценарии, которые поставляются с Apache, - это просто простые оболочки оболочки, которые делают что-то похожее, как указано выше.

После связывания файлов не забудьте запустить sudo service nginx reload/ service nginx reload


122
2017-09-05 08:49



Да, я знаю, как с помощью командной строки, спасибо - Ghassen Telmoudi
Тогда я не уверен, о чем вы действительно просите. - pkhamre
не забудьте перезагрузить сервер nginx с помощью: sudo service nginx reload - Ricardo Martins
@pkhamre: При использовании Apache существуют два сценария: a2ensite и a2dissite. Они просто создают и удаляют символические ссылки, которые вы описываете, поэтому они являются более быстрыми способами включения и отключения. - Mads Skjern
Спасибо за постоянную поддержку этого старого ответа. Если бы OP принял этот ответ, это было бы эпично :) - pkhamre


Просто создайте этот скрипт /usr/bin/nginx_modsite и сделать его исполняемым.

#!/bin/bash

##
#  File:
#    nginx_modsite
#  Description:
#    Provides a basic script to automate enabling and disabling websites found
#    in the default configuration directories:
#      /etc/nginx/sites-available and /etc/nginx/sites-enabled
#    For easy access to this script, copy it into the directory:
#      /usr/local/sbin
#    Run this script without any arguments or with -h or --help to see a basic
#    help dialog displaying all options.
##

# Copyright (C) 2010 Michael Lustfield <mtecknology@ubuntu.com>

# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.

##
# Default Settings
##

NGINX_CONF_FILE="$(awk -F= -v RS=' ' '/conf-path/ {print $2}' <<< $(nginx -V 2>&1))"
NGINX_CONF_DIR="${NGINX_CONF_FILE%/*}"
NGINX_SITES_AVAILABLE="$NGINX_CONF_DIR/sites-available"
NGINX_SITES_ENABLED="$NGINX_CONF_DIR/sites-enabled"
SELECTED_SITE="$2"

##
# Script Functions
##

ngx_enable_site() {
    [[ ! "$SELECTED_SITE" ]] &&
        ngx_select_site "not_enabled"

    [[ ! -e "$NGINX_SITES_AVAILABLE/$SELECTED_SITE" ]] && 
        ngx_error "Site does not appear to exist."
    [[ -e "$NGINX_SITES_ENABLED/$SELECTED_SITE" ]] &&
        ngx_error "Site appears to already be enabled"

    ln -sf "$NGINX_SITES_AVAILABLE/$SELECTED_SITE" -T "$NGINX_SITES_ENABLED/$SELECTED_SITE"
    ngx_reload
}

ngx_disable_site() {
    [[ ! "$SELECTED_SITE" ]] &&
        ngx_select_site "is_enabled"

    [[ ! -e "$NGINX_SITES_AVAILABLE/$SELECTED_SITE" ]] &&
        ngx_error "Site does not appear to be \'available\'. - Not Removing"
    [[ ! -e "$NGINX_SITES_ENABLED/$SELECTED_SITE" ]] &&
        ngx_error "Site does not appear to be enabled."

    rm -f "$NGINX_SITES_ENABLED/$SELECTED_SITE"
    ngx_reload
}

ngx_list_site() {
    echo "Available sites:"
    ngx_sites "available"
    echo "Enabled Sites"
    ngx_sites "enabled"
}

##
# Helper Functions
##

ngx_select_site() {
    sites_avail=($NGINX_SITES_AVAILABLE/*)
    sa="${sites_avail[@]##*/}"
    sites_en=($NGINX_SITES_ENABLED/*)
    se="${sites_en[@]##*/}"

    case "$1" in
        not_enabled) sites=$(comm -13 <(printf "%s\n" $se) <(printf "%s\n" $sa));;
        is_enabled) sites=$(comm -12 <(printf "%s\n" $se) <(printf "%s\n" $sa));;
    esac

    ngx_prompt "$sites"
}

ngx_prompt() {
    sites=($1)
    i=0

    echo "SELECT A WEBSITE:"
    for site in ${sites[@]}; do
        echo -e "$i:\t${sites[$i]}"
        ((i++))
    done

    read -p "Enter number for website: " i
    SELECTED_SITE="${sites[$i]}"
}

ngx_sites() {
    case "$1" in
        available) dir="$NGINX_SITES_AVAILABLE";;
        enabled) dir="$NGINX_SITES_ENABLED";;
    esac

    for file in $dir/*; do
        echo -e "\t${file#*$dir/}"
    done
}

ngx_reload() {
    read -p "Would you like to reload the Nginx configuration now? (Y/n) " reload
    [[ "$reload" != "n" && "$reload" != "N" ]] && invoke-rc.d nginx reload
}

ngx_error() {
    echo -e "${0##*/}: ERROR: $1"
    [[ "$2" ]] && ngx_help
    exit 1
}

ngx_help() {
    echo "Usage: ${0##*/} [options]"
    echo "Options:"
    echo -e "\t<-e|--enable> <site>\tEnable site"
    echo -e "\t<-d|--disable> <site>\tDisable site"
    echo -e "\t<-l|--list>\t\tList sites"
    echo -e "\t<-h|--help>\t\tDisplay help"
    echo -e "\n\tIf <site> is left out a selection of options will be presented."
    echo -e "\tIt is assumed you are using the default sites-enabled and"
    echo -e "\tsites-disabled located at $NGINX_CONF_DIR."
}

##
# Core Piece
##

case "$1" in
    -e|--enable)    ngx_enable_site;;
    -d|--disable)   ngx_disable_site;;
    -l|--list)  ngx_list_site;;
    -h|--help)  ngx_help;;
    *)      ngx_error "No Options Selected" 1; ngx_help;;
esac

Как это работает:

Чтобы перечислить все сайты

$ sudo nginx_modsite -l

Чтобы включить сайт "test_website"

$ sudo nginx_modsite -e test_website

Чтобы отключить сайт "test_website"

$ sudo nginx_modsite -d test_website

57
2017-12-18 14:58



в функции ngx_relaod, я прокомментировал чтение и просто сделаю reload = "y", так как я запускаю это через cron и не хочу приглашения вообще. Благодаря! - radtek
да, это идеальный смысл, можете ли вы сказать мне, где вы вносили изменения? - Ghassen Telmoudi
Очень большой скрипт для переноса некоторых стандартных команд одной строки. - tobltobs
@tobltobs Хорошие программисты пишут код, отличные программисты крадут код :) Это делает приятное дополнение к моей коллекции сценариев обработки сервера. - rdev5
@GhassenTelmoudi как сценарий, который вы продолжаете упоминать, - это сторонний скрипт, который даже не упакован создателями (ubuntu) в пакет nginx, ваш комментарий предлагает использовать сторонний скрипт в альтернативной командной строке (одна строка). Именно так создаются уязвимости безопасности и излишне сложные деревья зависимостей - scones


Вы имеете в виду nginx_ensite а также nginx_dissite?


27
2017-09-05 08:36



Это едва ли ответ, не так ли? Эти команды отсутствуют в моей установке nginx, на Ubuntu, установленном с apt-get. Похоже, что это всего лишь сторонний скрипт: github.com/perusio/nginx_ensite - Mads Skjern
@MadsSkjern Если это «едва ответ», то принятый ответ не так уж и много! - Michael Hampton♦
Прежде всего, спасибо за ответ. И извините за мой комментарий, который, возможно, звучит оскорбительно, когда я на самом деле хотел только указать, что это было не очень полезно для меня (в то время), из-за того, что он слишком много полагался на читатель. - Mads Skjern
Вы ответили двумя командами и адресом, и даже в форме вопроса. Как кто-то с моим низким уровнем опыта, ваш ответ отправил бы меня туда по поиску. Может быть, я найду полезное руководство / учебник / демонстрацию за 2 минуты, может быть, я буду оглядываться на час и все еще смущаться. Тогда мне бы помогло: «Есть такие инструменты nginx_ensite и nginx_dissite, это сторонний скрипт, загрузите его здесь, и они работают таким образом, например, пример». Ответ Гассена более сложный, более вводный, более полезный. Надеюсь, вы понимаете, что я имею в виду :) - Mads Skjern
@MadsSkjern Ну, вы могли бы просто нажать ссылку. :) - Michael Hampton♦


NGINX

Если вы используете один из официальных пакетов upstream nginx из http://nginx.org/packages/, лучший способ - перейти к /etc/nginx/conf.d каталога и переименовать затронутый файл из .conf суффикс к другому, чтобы отключить сайт:

sudo mv -i /etc/nginx/conf.d/default.conf{,.off}

Или наоборот:

sudo mv -i /etc/nginx/conf.d/example.com.conf{.disabled,}

Это связано с тем, что по умолчанию /etc/nginx/nginx.conf имеет следующее include директива:

http {
    …
    include /etc/nginx/conf.d/*.conf;
}

Debian / Ubuntu

Однако, если вы используете производную Debian / Ubuntu, то в дополнение к conf.d, вы также можете иметь злой нестандартный sites-available а также sites-enabled каталоги, некоторые файлы, под которыми могут быть небрежно включены без учета их расширения:

http {
    …
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Таким образом, в Debian / Ubuntu вам может понадобиться выяснить, где находится конфигурация сайта.

  • Вы можете использовать следующую команду, чтобы получить список всех доступный сайтов путем запуска find(1) чтобы найти все обычные файлы, соответствующие данной маске:

    find /etc/nginx -maxdepth 2 -type f \( -path "*/conf.d/*.conf" -or -path "*/sites-*/*" \)

  • Вы можете использовать следующую команду, чтобы получить список всех включен места:

    find /etc/nginx -maxdepth 2 \( -path "*/conf.d/*.conf" -or -path "*/sites-enabled/*" \)

Затем отключить / включить сайты в Debian / Ubuntu:

  • к запрещать сайт: если конфигурация находится в conf.d, просто переименуйте файл, чтобы больше не .conf суффикс; или в sites-enabled, переместите его из sites-enabled,

  • к включить сайта, лучшим способом было бы переместить его на /etc/nginx/conf.d, и переименуйте .conf суффикс.

Постскриптум Почему я думаю, что Debian include /etc/nginx/sites-enabled/*; это зло? Попробуйте отредактировать пару файлов в этом каталоге и emacs создайте резервные файлы (с помощью ~ суффикс), затем спросите меня снова.


3
2017-08-26 20:45



Я хотел бы отметить, что проблема с этим ответом заключается в двух ошибочных предположениях относительно Debian и производных: 1) Цель conf.d каталог - это общая для сервера конфигурация для модулей, плагинов, обработчиков fastcgi и т. д. и явно не для хранения конфигурации хоста / vhost и 2) One не следует редактировать любые файлы в sites-enabled  serverfault.com/a/825297/86189 - Bojan Markovic
@BojanMarkovic, вы ошибаетесь. Вы не можете обслуживать серверные конфигурации в conf.d, поскольку он включен в том же контексте, что и sites-enabled один - http-level, поэтому директивы модуля и плагина могут не применяться. Аналогичным образом, ваше предположение о том, что нельзя редактировать файлы в sites-enabled это просто принятие желаемого за действительное - в дистрибутиве или в каталоге нет таких инструкций, поэтому это чисто ваше предположение, которое никоим образом не выполняется в результате распространения, поэтому у вас возникают всевозможные проблемы, возникающие из-за этого, например , stackoverflow.com/q/45852224/1122270, - cnst
Проблема, о которой вы указали, абсолютно не связана с этим. Я ошибаюсь conf.d как, вероятно, поддерживающий Debian Nginx (или, возможно, он совместим с восходящим потоком). О не редактировании файлов в sites-enabled, это не принятие желаемого за действительное, а предполагаемый фокус под Apache, который они пытались подражать на Nginx. В apache это совершенно очевидно из-за существования a2ensite а также a2dissite скрипты. К сожалению, для Nginx ничего подобного не указано, что показывает, насколько низкое качество обслуживания этого пакета находится на Debian. И не хватает документации, правда. - Bojan Markovic
.. Я дам вам то, что (в этом отношении недостает документов). Однако вы первый человек, работающий с веб-серверами в Debian, с которыми я разговаривал, был смущен этим. Просто ls -al sites-enabled в Apache или Nginx показано, что существующие файлы в каталоге являются символическими ссылками из -available, а также для модулей под Apache, наряду с предоставленными a2enmod/a2dismod scirpts. - Bojan Markovic
@pzrq, вы приравниваете много несвязанных вещей; доступный / enabled не имеет ничего общего с apache или debian; не доказательство обратного, это в основном то, что какой-то сопровождающий пробрался в нужное место в нужное время, когда никто не смотрел, и он застрял; нет смысла продолжать использовать его, если вы уже тратите ресурсы на переход к nginx, который уже потребует перезаписывать конфигурацию, чтобы, например, избавиться от .htaccess, может также стандартизировать вашу конфигурацию со всеми облаками и дистрибутивами , что достаточно просто с conf.d как есть. - cnst


Другой способ - просто переименовать конфигурационный файл сайта в то, что заканчивается без .conf

Например. sudo mv mysite.conf mysite.conf.disabled

Затем перезагрузите nginx, и этот vhost вернется к умолчанию.


0
2018-05-19 03:15



всегда полезно использовать команду nginx_modsite, вы можете перечислить, отключить, включить сайт намного проще и быстрее, чем переименовывать файл каждый раз, когда @Pyrite - Ghassen Telmoudi
По-видимому, nginx_modsite установлен по умолчанию. Однако переименование файлов является опцией акции. Кроме того, я префикс мой ответ как альтернативный метод, а не лучший метод @ GhassenTelmoudi - Pyrite
@Pyrite В Ubuntu 14.04 расширение не работает, поскольку nginx.conf включает в себя сайты с включенными include /etc/nginx/sites-enabled/*; он включает только conf conf *.conf - Bojan Markovic
@GhassenTelmoudi как сценарий, который вы продолжаете упоминать, - это сторонний скрипт, который даже не упакован создателями (ubuntu) в пакет nginx, ваш комментарий предлагает использовать сторонний скрипт в альтернативной командной строке (одна строка). Именно так создаются уязвимости безопасности и излишне сложные деревья зависимостей. - scones
@BojanMarkovic, да, Debian и Ubuntu - зло - serverfault.com/a/870618/110020 - их wildcast любого файла особенно хлопотно, если вы редактируете файлы непосредственно в sites-enabled, и ваш редактор создает резервные файлы. - cnst