Nginx włącz polecenie strony


131

Wszyscy wiemy, jak włączyć stronę internetową za pomocą apache w systemie Linux. Jestem pewien, że wszyscy zgadzamy się na użycie polecenia a2ensite.

Niestety nie ma domyślnej równoważnej komendy dostarczanej z Nginx, ale zdarzyło się, że zainstalowałem jakiś pakiet na Ubuntu, który pozwolił mi włączyć / wyłączyć witryny i wyświetlić je.

Problem polega na tym, że nie pamiętam nazwy tego pakietu.

Czy ktoś wie o czym mówię?

Podaj mi nazwę tego pakietu i nazwę polecenia.


5
Twierdzenie o a2ensite nie jest prawdziwe w przypadku CentOS
— user619714,

Odpowiedzi:


166

Jeśli zainstalowałeś nginxpakiet z repozytoriów Ubuntu, będziesz mieć dwa katalogi.

/etc/nginx/sites-enableda /etc/nginx/sites-available.

W głównej konfiguracji nginx /etc/nginx/nginx.confmasz następujący wiersz:

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

Aby wyświetlić listę wszystkich dostępnych wirtualnych hostów, możesz uruchomić następującą komendę:

ls /etc/nginx/sites-available

Aby aktywować jedno z nich, uruchom następujące polecenie:

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

Skrypty dostarczane z Apache to po prostu proste opakowanie powłoki, które robi coś podobnego jak powyżej.

Po połączeniu plików pamiętaj, aby uruchomić sudo service nginx reload/service nginx reload


5
Tak, wiem jak to zrobić za pomocą wiersza poleceń, dzięki
— Ghassen Telmoudi,

23
Więc nie jestem pewien, o co tak naprawdę prosisz.
— pkhamre

3
pamiętaj, aby przeładować serwer nginx za pomocą: sudo service nginx reload
— Ricardo Martins

16
@pkhamre: Podczas korzystania z Apache istnieją dwa skrypty: a2ensite i a2dissite. Po prostu tworzą i usuwają opisywane linki symboliczne, dzięki czemu są szybszymi sposobami włączania i wyłączania.
— Mads Skjern,

6
Dzięki za ciągłe przychylność tej starej odpowiedzi. Jeśli OP przyjmie tę odpowiedź, będzie to epicka :)
— pkhamre

69

Po prostu utwórz ten skrypt /usr/bin/nginx_modsitei wykonaj go.

#!/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

Jak to działa:

Aby wyświetlić listę wszystkich witryn

$ sudo nginx_modsite -l

Aby włączyć witrynę „test_website”

$ sudo nginx_modsite -e test_website

Aby wyłączyć witrynę „test_website”

$ sudo nginx_modsite -d test_website

w funkcji ngx_relaod skomentowałem odczyt i po prostu zmieniłem reload = "y", ponieważ uruchamiam to przez crona i wcale nie chcę znaku zachęty. Dzięki!
— radtek

tak, to ma sens, czy możesz mi powiedzieć, gdzie dokonałeś zmiany?
— Ghassen Telmoudi

10
Dość duży skrypt do zawijania niektórych standardowych poleceń jednowierszowych.
— tobltobs

1
@tobltobs Dobrzy programiści piszą kod, świetni programiści kradną kod :) To miły dodatek do mojej kolekcji skryptów do obrazowania serwerów.
— rdev5,

5
@GhassenTelmoudi, ponieważ skrypt, o którym ciągle wspominasz, jest skryptem strony trzeciej, który nie jest nawet spakowany przez twórców (ubuntu) w pakiecie nginx, twój komentarz sugeruje użycie skryptu innej firmy zamiast (jednowierszowej) linii poleceń. W ten sposób powstają luki w zabezpieczeniach i niepotrzebnie złożone drzewa zależności
— scones

32

Masz na myśli nginx_ensitei nginx_dissite?


16
To ledwie odpowiedź, prawda? Te polecenia nie są obecne w mojej instalacji nginx na Ubuntu zainstalowanej z apt-get. Wygląda na to, że jest to tylko skrypt innej firmy: github.com/perusio/nginx_ensite
— Mads Skjern

5
@MadsSkjern Jeśli jest to „ledwie odpowiedź”, wówczas odpowiedź nie jest zbyt duża!
— Michael Hampton

3
Przede wszystkim dziękuję za odpowiedź :) I przepraszam za mój komentarz, który może zabrzmi obraźliwie, kiedy tak naprawdę chciałem tylko zaznaczyć, że nie był on dla mnie bardzo przydatny (w tym czasie), ponieważ zbyt wiele z niego zakładał czytelnik.
— Mads Skjern

25
Odpowiedziałeś dwoma poleceniami i adresem URL, a nawet w formie pytania. Jako ktoś z moim niskim poziomem doświadczenia, twoja odpowiedź wysłałaby mnie tam, gdzie google. Może znajdę pomocnego przewodnika / tutoriala / demo za 2 minuty, może rozejrzę się przez godzinę i nadal będę zdezorientowany. Pomogło mi wtedy: „Istnieją narzędzia nginx_ensite i nginx_dissite, jest to skrypt innej firmy, pobierz go stąd i działają w ten sposób, przykład, przykład”. Odpowiedź Ghassena jest bardziej złożona, bardziej wprowadzająca, bardziej pomocna. Mam nadzieję, że rozumiesz, co mam na myśli :)
— Mads Skjern

8
@MadsSkjern Cóż, mógłbyś właśnie kliknąć link. :)
— Michael Hampton

4

NGINX

Jeśli używasz jednego z oficjalnych pakietów nginx z http://nginx.org/packages/ , najlepszym sposobem jest przejście do /etc/nginx/conf.dkatalogu i zmiana nazwy pliku, którego dotyczy problem, z .confprzyrostka na inny na wyłącz witrynę:

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

Lub odwrotnie, aby to włączyć:

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

Jest tak, ponieważ domyślnie /etc/nginx/nginx.confma następującą includedyrektywę:

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

Debian / Ubuntu

Jednakże, jeśli używasz pochodnej Debian / Ubuntu, to oprócz tego conf.dmożesz mieć złe niestandardowesites-available i sites-enabledkatalogi, niektóre pliki, pod którymi można niechętnie zawierać, bez względu na ich rozszerzenie:

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

W związku z tym w Debian / Ubuntu może być najpierw konieczne ustalenie, gdzie znajduje się konfiguracja witryny.

  • Możesz użyć następującego polecenia, aby uzyskać listę wszystkich dostępnych witryn, uruchamiając się, find(1)aby znaleźć wszystkie zwykłe pliki pasujące do danej maski:

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

  • Możesz użyć następującego polecenia, aby uzyskać listę wszystkich włączonych witryn:

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

Następnie, aby wyłączyć / włączyć witryny w Debian / Ubuntu:

  • Aby wyłączyć witrynę: jeśli konfiguracja jest włączona conf.d, po prostu zmień nazwę pliku, aby nie mieć już .confprzyrostka; lub jeśli jest sites-enabled, usuń go sites-enabled.

  • Aby włączyć witrynę, najlepszym sposobem jest przeniesienie jej do witryny /etc/nginx/conf.di zmiana nazwy na .confprzyrostek.

PS Dlaczego myślę, że Debian include /etc/nginx/sites-enabled/*;jest zły? Spróbuj edytować kilka plików w tym katalogu i poproś emacso utworzenie plików kopii zapasowej (z ~przyrostkiem), a następnie zapytaj mnie ponownie.


4
Chciałbym zauważyć, że problem z tą odpowiedzią leży w dwóch błędnych założeniach dotyczących Debiana i pochodnych: 1) Celem conf.dkatalogu jest konfiguracja na całym serwerze, taka jak dla modułów, wtyczek, programów obsługi Fastcgi itp. I jawnie nie do przechowywania hosta / vhost konfiguracje w i 2) Nie należy edytować żadnych plików w sites-enabled serverfault.com/a/825297/86189
— Bojan Markovic,

@BojanMarkovic, mylisz się. Nie możecie służyć konfiguracjach serwerowych szeroko conf.d, ponieważ jest ona zawarta w tym samym kontekście, co sites-enabledone - http-level kontekście, więc dyrektyw moduł i plugin mogą nie mieć zastosowania. Podobnie twoje założenie, że nie należy edytować plików, sites-enabledjest jedynie pobożnym życzeniem - nie ma takich instrukcji w dystrybucji ani w katalogu, więc jest to wyłącznie twoje założenie, które nie jest w żaden sposób narzucone przez dystrybucję, więc występują różnego rodzaju problemy z tego wynikające, np . stackoverflow.com/q/45852224/1122270 .
— cnst

Problem, który wskazałeś, nie ma z tym żadnego związku. Mylę się co conf.ddo prawdopodobnie opiekuna Debiana dla Nginx (a może jest on utrzymywany w celu zachowania zgodności z poprzednimi wersjami). Jeśli chodzi o brak edytowania plików sites-enabled, to nie jest pobożne życzenie, ale rzekomy przepływ pod Apache, który próbowali emulować na Nginx. W Apache jest to dość oczywiste ze względu na istnienie a2ensitei a2dissiteskrypty. Niestety dla Nginx nie ma nic takiego, co pokazuje, jak niska jest jakość utrzymania tego pakietu w Debianie. Oba brakuje dokumentacji, to prawda.
— Bojan Markovic

2
.. Dam ci to (dokumentom brakuje pod tym względem absolutnie). Jednak jesteś pierwszą osobą zarządzającą serwerami WWW na Debianie, z którą rozmawiałem, co było przez to mylące. Po prostu prosty ls -al sites-enabledw Apache lub Nginx pokazuje, że istniejące pliki w katalogu to dowiązania symboliczne -available, to samo dotyczy modułów pod Apache, wraz z zapewnionymi a2enmod/ a2dismodscirpts.
— Bojan Markovic

1
@pzrq, zrównujesz wiele niepowiązanych rzeczy; dostępne / włączone nie ma nic wspólnego z Apache ani Debianem; jeśli nie ma dowodów przeciwnych, jest to po prostu coś, co jakiś opiekun zakradł się we właściwe miejsce we właściwym czasie, gdy nikt nie patrzył, i utknęło; nie ma powodu, aby kontynuować korzystanie z niego, jeśli już przeznaczasz zasoby na przejście na Nginx, co wymagałoby już przepisania konfiguracji, aby na przykład pozbyć się pliku .htaccess - równie dobrze może standaryzować konfigurację z uwzględnieniem wszystkich chmur i dystrybucji , co jest dość łatwe w obecnej conf.dpostaci.
— cnst

1

Inną metodą jest zmiana nazwy pliku konfiguracyjnego witryny na coś, co kończy się bez .conf

Na przykład sudo mv mysite.conf mysite.conf.disabled

Następnie przeładuj nginx, a ten vhost powróci do ustawień domyślnych.


zawsze miło jest użyć polecenia nginx_modsite, możesz łatwiej, szybciej i szybciej wyświetlać listę, wyłączać i włączać witrynę, niż zmieniać nazwę pliku za każdym razem @Pyrite
— Ghassen Telmoudi

3
@Pyrite Na Ubuntu 14.04 rozszerzenie nie ma znaczenia, ponieważ nginx.conf zawiera obsługę stron, ponieważ include /etc/nginx/sites-enabled/*;zawiera tylko conf dir as*.conf
— Bojan Markovic

2
@GhassenTelmoudi, ponieważ skrypt, o którym ciągle wspominasz, jest skryptem strony trzeciej, który nie jest nawet spakowany przez twórców (ubuntu) w pakiecie nginx, twój komentarz sugeruje użycie skryptu innej firmy zamiast (jednowierszowej) linii poleceń. W ten sposób powstają luki w zabezpieczeniach i niepotrzebnie złożone drzewa zależności.
— bułeczki

1
@ cnst Nie posunąłbym się tak daleko, by nazwać to złem, szczególnie ich wybór sites-availablei sites-enabledjak mają zalety i zastosowanie. Ktoś prawdopodobnie powinien po prostu zgłosić raport o błędzie dla prawdziwej linii obrażeń w nginx conf /etc/nginx/sites-enabled/*.conf;i prawdopodobnie zrobi to, ponieważ prawdopodobnie jest to przeoczenie. Ale jeśli szanujesz przepływ pracy w Debianie, i tak edytujesz pliki sites-availablei łączysz te, w których chcesz włączyć sites-enabled.
— Bojan Markovic

1
@cnst Dlaczego to jest dość oczywiste, prawda? Umożliwia włączanie i wyłączanie vhostów bez usuwania ich w sposób identyczny zarówno w apache, jak i nginx. Fakt, że interesujesz się wyłącznie nginx, nie unieważnia zamiaru opiekunów Debiana, aby zapewnić podobną metodę włączania / wyłączania dla obu serwerów WWW.
— Bojan Markovic,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.