Frage Nginx aktivieren Site-Befehl


Wir alle wissen, wie man eine Webseite mit Apache unter Linux aktiviert. Ich bin mir ziemlich sicher, dass wir alle darin übereinstimmen, den Befehl a2ensite zu verwenden.

Leider gibt es keinen Standard-äquivalenten Befehl, der mit Nginx kommt, aber es ist passiert, dass ich ein Paket auf Ubuntu installiert habe, das mir erlaubte, Sites zu aktivieren / deaktivieren und sie aufzulisten.

Das Problem ist, ich erinnere mich nicht an den Namen dieses Pakets.

Weiß jemand wovon ich rede?

Bitte teilen Sie mir den Namen dieses Pakets und den Befehlsnamen mit.


104
2017-09-05 08:33


Ursprung


Die Aussage über a2ensite gilt nicht für CentOS - Iain


Antworten:


Wenn Sie das installiert haben nginx Paket aus den Ubuntu-Repositories haben Sie zwei Verzeichnisse.

/etc/nginx/sites-enabled und /etc/nginx/sites-available.

In der Hauptnginx-Konfiguration /etc/nginx/nginx.conf, Sie haben folgende Zeile:

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

Um also alle verfügbaren virtuellen Hosts aufzulisten, können Sie den folgenden Befehl ausführen:

ls /etc/nginx/sites-available

Führen Sie den folgenden Befehl aus, um einen von ihnen zu aktivieren:

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

Die Skripte, die mit Apache geliefert werden, sind im Grunde nur einfache Shell-Wrapper, die etwas ähnliches wie oben tun.

Denken Sie daran, nach dem Verknüpfen der Dateien auszuführen sudo service nginx reload/ service nginx reload


128
2017-09-05 08:49



Ja, ich weiß, wie man das über die Befehlszeile macht, danke - Ghassen Telmoudi
Dann bin ich mir nicht sicher, wonach Sie wirklich fragen. - pkhamre
Denken Sie daran, den nginx-Server erneut zu laden: sudo service nginx reload - Ricardo Martins
@pkhamre: Bei der Verwendung von Apache gibt es zwei Skripte: a2ensite und a2dissite. Sie erstellen und löschen einfach die symbolischen Links, die Sie beschreiben, sodass sie schneller aktiviert und deaktiviert werden können. - Mads Skjern
Danke für die ständigen Upvotes zu dieser alten Antwort. Wenn OP diese Antwort akzeptieren würde, wäre es episch :) - pkhamre


Erstellen Sie einfach dieses Skript /usr/bin/nginx_modsite und mache es ausführbar.

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

Wie es funktioniert:

Um alle Websites aufzulisten

$ sudo nginx_modsite -l

So aktivieren Sie die Website "test_website"

$ sudo nginx_modsite -e test_website

So deaktivieren Sie die Website "test_website"

$ sudo nginx_modsite -d test_website

58
2017-12-18 14:58



In der Funktion ngx_relaod habe ich das Lesen auskommentiert und mache einfach reload = "y", da ich dies über cron ausführe und die Eingabeaufforderung überhaupt nicht möchte. Vielen Dank! - radtek
Ja, es macht den perfekten Sinn. Kannst du mir sagen, wo du die Veränderung vorgenommen hast? - Ghassen Telmoudi
Ein ziemlich großes Skript, um einige Standardzeilenbefehle zu umbrechen. - tobltobs
@tobttobs Gute Programmierer schreiben Code, großartige Programmierer stehlen Code :) Das macht eine nette Ergänzung zu meiner Sammlung von Server-Imaging-Skripten. - rdev5
@GhassenTelmoudi als Skript, das Sie erwähnen, ist ein Drittanbieter-Skript, das nicht einmal von den Erstellern (ubuntu) in das nginx-Paket gepackt wird. Ihr Kommentar schlägt vor, ein Drittanbieter-Skript über eine (eine Zeile) Befehlszeilenalternative zu verwenden. So entstehen Sicherheitslücken und unnötig komplexe Abhängigkeitsbäume - scones


Beziehen Sie sich darauf nginx_ensite und nginx_dissite?


29
2017-09-05 08:36



Das ist kaum eine Antwort, oder? Diese Befehle sind bei meiner Installation von nginx auf Ubuntu, das mit apt-get installiert wurde, nicht vorhanden. Es scheint, als ob es nur ein 3rd-Party-Skript ist: github.com/perusio/nginx_ensite - Mads Skjern
@ MadsSkjern Wenn dies "kaum eine Antwort" ist, dann ist die akzeptierte Antwort auch nicht viel von eins! - Michael Hampton♦
Danke erstmal für die Beantwortung :) Und Entschuldigung für meinen Kommentar, der sich vielleicht beleidigend anhört, als ich eigentlich nur darauf hinweisen wollte, dass es für mich (zu der Zeit) nicht sehr nützlich war, weil ich davon zu viel angenommen habe Leser. - Mads Skjern
Sie haben mit zwei Befehlen und einer URL und sogar in Form einer Frage geantwortet. Als jemand mit meiner geringen Erfahrung hätte mich deine Antwort dorthin gegoogelt. Vielleicht würde ich in 2 Minuten einen hilfreichen Leitfaden / Tutorial / Demo finden, vielleicht würde ich mich eine Stunde lang umsehen und trotzdem verwirrt sein. Was mir damals geholfen hätte, war: "Es gibt diese Werkzeuge nginx_ensite und nginx_dissite, es ist ein Drittanbieter-Skript, lade es von hier herunter und sie funktionieren auf diese Weise, Beispiel, Beispiel". Ghassens Antwort ist ausführlicher, einleitender, hilfreicher. Ich hoffe du verstehst was ich meine :) - Mads Skjern
@MadsSkjern Nun, du hättest einfach auf den Link klicken können. :) - Michael Hampton♦


NGINX

Wenn du es benutzt eines der offiziellen Upstream-Pakete von nginx von http://nginx.org/packages/, der beste Weg ist es, zu navigieren /etc/nginx/conf.d Verzeichnis und benennen Sie die betroffene Datei mit a .conf Suffix um ein anderes zu haben, um die Seite zu deaktivieren:

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

Oder das Gegenteil, um es zu ermöglichen:

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

Dies liegt an der Standardeinstellung /etc/nginx/nginx.conf hat folgendes include Richtlinie:

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

Debian / Ubuntu

Wenn Sie jedoch ein Debian / Ubuntu-Derivat verwenden, dann zusätzlich zu conf.dVielleicht hast du auch die böser Nicht-Standard sites-available und sites-enabled Verzeichnisse, einige Dateien, unter denen möglicherweise ohne Rücksicht auf ihre Erweiterung schlampig enthalten sind:

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

Daher müssen Sie in Debian / Ubuntu zunächst herausfinden, wo sich die Site-Konfiguration befindet.

  • Sie können den folgenden Befehl verwenden, um eine Liste aller zu erhalten verfügbar Websites durch Ausführen find(1) um alle regulären Dateien zu finden, die der angegebenen Maske entsprechen:

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

  • Sie können den folgenden Befehl verwenden, um eine Liste aller zu erhalten aktiviert Seiten:

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

Dann zum Deaktivieren / Aktivieren von Websites unter Debian / Ubuntu:

  • Zu deaktivieren Eine Site: wenn die Config in ist conf.dBenennen Sie die Datei einfach um, wenn Sie kein a mehr haben .conf Suffix; oder wenn sites-enabledzieh es aus sites-enabled.

  • Zu aktivieren eine Website, wäre der beste Weg, es zu verschieben /etc/nginx/conf.dund umbenennen, um a zu haben .conf Suffix.

P.S. Warum denke ich Debian? include /etc/nginx/sites-enabled/*; ist böse? Versuchen Sie, ein paar Dateien in diesem Verzeichnis zu bearbeiten emacs Erstellen Sie die Backup - Dateien (mit dem ~ Suffix), dann frag mich nochmal.


3
2017-08-26 20:45



Ich möchte darauf hinweisen, dass das Problem mit dieser Antwort in zwei falschen Annahmen bezüglich Debian und Derivaten liegt: 1) Der Zweck von conf.d Verzeichnis ist eine serverweite Konfiguration wie die für Module, Plugins, Fastcgi-Handler usw. und explizit nicht um Host / Vhost-Konfigurationen in und 2) One zu speichern sollte nicht Bearbeiten Sie alle Dateien in sites-enabled  serverfault.com/a/825297/86189 - Bojan Markovic
@BojanMarkovic, du liegst falsch. Sie können serverweite Konfigurationen in nicht liefern conf.d, weil es im selben Kontext enthalten ist wie die sites-enabled ein - http-Stufenkontext, so dass Modul- und Plugin-Direktiven möglicherweise nicht zutreffen. Ebenso deine Annahme, dass man Dateien nicht bearbeiten darf sites-enabled ist nur Wunschdenken - es gibt keine solche Anweisungen innerhalb der Distro, oder innerhalb des Verzeichnisses, so ist es nur Ihre Annahme, die in keiner Weise durch die Verteilung erzwungen wird, so haben Sie alle Arten von Fragen, die sich daraus ergeben, z , stackoverflow.com/q/45852224/1122270. - cnst
Das Problem, auf das Sie hingewiesen haben, hat absolut nichts damit zu tun. Da liege ich falsch conf.d wie es wahrscheinlich der Debian-Betreuer von Nginx ist (oder vielleicht aus Gründen der Kompatibilität mit Upstream). Über das Bearbeiten von Dateien in sites-enabledEs ist kein Wunschdenken, sondern die angebliche Arbeit unter Apache, die sie auf Nginx nachzuahmen versuchten. In Apache ist es offensichtlich aufgrund der Existenz von a2ensite und a2dissite Skripte. Leider gibt es für Nginx nichts, was zeigt, wie niedrig die Wartungsqualität dieses Pakets auf Debian ist. Beides fehlt Dokumentation, stimmt. - Bojan Markovic
..Ich gebe Ihnen das (Dokumente fehlen in dieser Hinsicht abgrundtief). Allerdings sind Sie die erste Person, die Web-Server auf Debian ausführt, mit denen ich gesprochen habe und die dadurch verwirrt waren. Nur ein einfaches ls -al sites-enabled in Apache oder Nginx zeigt, dass die vorhandenen Dateien im Verzeichnis Symlinks sind -available, dito für Module unter Apache, zusammen mit zur Verfügung gestellt a2enmod/a2dismod scrpts. - Bojan Markovic
@pzrq, du setzt eine Menge nicht zusammenhängender Dinge gleich; das available / enabled hat nichts mit apache oder debian zu tun; Wenn man das Gegenteil bezweifelt, ist es im Grunde nur etwas, dass sich ein Maintainer zur richtigen Zeit an den richtigen Ort geschlichen hat, als niemand hinsah, und er blieb stecken; Es gibt wenig Grund, es weiter zu verwenden, wenn Sie bereits die Ressourcen für den Übergang zu nginx ausgeben, was bereits Konfigurationsumschreibungen erfordern würde, um z. B. .htaccess loszuwerden - könnte genauso gut Ihre Konfiguration mit allen Clouds und Distributionen standardisieren , das ist einfach genug mit conf.d wie es ist. - cnst


Eine andere Methode besteht darin, die Konfigurationsdatei der Site in etwas umzubenennen, das ohne .conf endet

Z.B. sudo mv mysite.conf mysite.conf.disabled

Laden Sie dann nginx neu, und dieser vhost wird auf den Standardwert zurückgesetzt.


0
2018-05-19 03:15



Es ist immer schön, den nginx_modsite-Befehl zu verwenden. Sie können die Site viel einfacher und schneller auflisten, deaktivieren, aktivieren, als die Datei jedes Mal @Pyrite umzubenennen - Ghassen Telmoudi
Es scheint nicht, dass nginx_modsite standardmäßig installiert ist. Das Umbenennen von Dateien ist jedoch eine Aktienoption. Außerdem habe ich meine Antwort als eine alternative Methode, nicht die beste Methode @GhassenTelmoudi - Pyrite
@Pyrite Auf Ubuntu 14.04 ist die Erweiterung nicht wesentlich, da nginx.conf sites-enabled als enthält include /etc/nginx/sites-enabled/*; es enthält nur conf dir als *.conf - Bojan Markovic
@GhassenTelmoudi als Skript, das Sie erwähnen, ist ein Drittanbieter-Skript, das nicht einmal von den Erstellern (ubuntu) in das nginx-Paket gepackt wird. Ihr Kommentar schlägt vor, ein Drittanbieter-Skript über eine (eine Zeile) Befehlszeilenalternative zu verwenden. So entstehen Sicherheitslücken und unnötig komplexe Abhängigkeitsbäume. - scones
@BojanMarkovic, ja, Debian und Ubuntu sind böse - serverfault.com/a/870618/110020 - Besonders problematisch ist es, wenn Sie Dateien in einer Datei direkt bearbeiten sites-enabledund Ihr Editor erstellt die Backup-Dateien. - cnst