Vraag Nginx maakt sitebevel mogelijk


We weten allemaal hoe we een website kunnen inschakelen met apache op linux. Ik ben er vrij zeker van dat we het allemaal eens zijn over het gebruik van de opdracht a2ensite.

Helaas is er geen standaard equivalent commando met Nginx, maar het gebeurde wel dat ik een pakket op ubuntu had geïnstalleerd waarmee ik websites kon in- / uitschakelen en een lijst kon maken.

Het probleem is dat ik de naam van dit pakket niet meer weet.

Weet iemand waar ik het over heb?

Vertel me alsjeblieft de naam van dit pakket en de naam van het commando.


104
2017-09-05 08:33


oorsprong


De bewering over a2ensite is niet waar voor CentOS - Iain


antwoorden:


Als u de nginx pakket van de Ubuntu-opslagplaatsen, hebt u twee mappen.

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

In de hoofd-nginx-configuratie, /etc/nginx/nginx.conf, je hebt de volgende regel:

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

Dus in principe om alle beschikbare virtuelehosts te vermelden, kunt u de volgende opdracht uitvoeren:

ls /etc/nginx/sites-available

Om een ​​van deze te activeren, voert u de volgende opdracht uit:

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

De scripts die met Apache worden meegeleverd, zijn in feite gewoon simpele shell-wrappers die iets vergelijkbaars doet als hierboven.

Na het koppelen van de bestanden, vergeet niet om uit te voeren sudo service nginx reload/ service nginx reload


128
2017-09-05 08:49



Ja, ik weet hoe ik dat kan gebruiken via de commandolijn, bedankt - Ghassen Telmoudi
Dan ben ik niet zeker wat u echt vraagt. - pkhamre
vergeet niet om de nginx-server opnieuw te laden met: sudo service nginx reload - Ricardo Martins
@pkhamre: Bij gebruik van Apache zijn er twee scripts: a2ensite en a2dissite. Ze maken en verwijderen eenvoudig de symbolische koppelingen die u beschrijft, dus het zijn snellere manieren om in en uit te schakelen. - Mads Skjern
Bedankt voor de constante opwellingen over dit oude antwoord. Als OP dit antwoord zou accepteren, zou het episch zijn :) - pkhamre


Creëer gewoon dit script /usr/bin/nginx_modsite en maak het uitvoerbaar.

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

Hoe het werkt:

Om alle sites te vermelden

$ sudo nginx_modsite -l

Site "test_website" inschakelen

$ sudo nginx_modsite -e test_website

Om de site "test_website" uit te schakelen

$ sudo nginx_modsite -d test_website

58
2017-12-18 14:58



in de functie ngx_relaod heb ik het lezen becommentarieerd en maak ik reload = "y" omdat ik dit via cron voer en de prompt helemaal niet wilde. Bedankt! - radtek
ja het is de perfecte zin, kun je me vertellen waar heb je de verandering gemaakt? - Ghassen Telmoudi
Een behoorlijk groot script om enkele standaardregelopdrachten in te pakken. - tobltobs
@tobltobs Goede programmeurs schrijven code, geweldige programmeurs stelen code :) Dit maakt een leuke toevoeging aan mijn verzameling server imaging scripts. - rdev5
@GhassenTelmoudi als het script dat je blijft noemen, is een script van een derde partij, dat zelfs niet is ingepakt door de makers (ubuntu) in het nginx-pakket, je opmerking suggereert om een ​​script van derden te gebruiken via een (één regel) opdrachtregelalternatief. Dit is hoe beveiligingskwetsbaarheden en onnodig complexe afhankelijkheidsbomen worden gecreëerd - scones


Ben je aan het verwijzen naar nginx_ensite en nginx_dissite?


29
2017-09-05 08:36



Dit is nauwelijks een antwoord, toch? Deze commando's zijn niet aanwezig op mijn installatie van nginx, op Ubuntu geïnstalleerd met apt-get. Het lijkt erop dat het gewoon een script van een derde partij is: github.com/perusio/nginx_ensite - Mads Skjern
@MadsSkjern Als dit "nauwelijks een antwoord" is, dan is het geaccepteerde antwoord ook niet veel! - Michael Hampton♦
Allereerst, bedankt voor het beantwoorden :) En sorry voor mijn opmerking, die misschien beledigend klinkt, toen ik eigenlijk alleen maar wilde wijzen op het feit dat het niet erg nuttig voor mij was (op dat moment), omdat het te veel aannam van de lezer. - Mads Skjern
U antwoordde met twee opdrachten en een URL en zelfs in de vorm van een vraag. Als iemand met mijn lage ervaringsniveau, zou je antwoord me er op googlen hebben gestuurd. Misschien zou ik in 2 minuten een nuttige gids / zelfstudie / demo vinden, misschien zou ik een uur rondkijken en nog steeds in de war zijn. Wat me toen had geholpen was: "Er zijn deze hulpprogramma's nginx_ensite en nginx_dissite, het is een script van derden, download het hier en ze werken op deze manier, bijvoorbeeld, voorbeeld". Ghassen's antwoord is gedetailleerder, meer inleidend, meer behulpzaam. Ik hoop dat je begrijpt wat ik bedoel :) - Mads Skjern
@MadsSkjern Nou, je had gewoon op de link kunnen klikken. :) - Michael Hampton♦


NGINX

Als je gebruikt een van de officiële stroomopwaartse pakketten van nginx van http://nginx.org/packages/, de beste manier is om naar de /etc/nginx/conf.d map en geef de naam van het betreffende bestand een a .conf achtervoegsel om een ​​andere te hebben om de site uit te schakelen:

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

Of het tegenovergestelde om het in te schakelen:

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

Dit komt omdat de standaardinstelling is /etc/nginx/nginx.conf heeft het volgende include richtlijn:

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

Debian / Ubuntu

Als u echter een Debian / Ubuntu-derivaat gebruikt, dan in aanvulling op conf.d, misschien heb je ook de slecht niet-standaard sites-available en sites-enabled mappen, sommige bestanden waaronder slordig kunnen worden opgenomen zonder rekening te houden met hun extensie:

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

Als zodanig moet u in Debian / Ubuntu eerst achterhalen waar de site-configuratie zich bevindt.

  • U kunt de volgende opdracht gebruiken om een ​​lijst met alle te krijgen beschikbaar sites door hardlopen find(1) om alle reguliere bestanden te vinden die overeenkomen met het gegeven masker:

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

  • U kunt de volgende opdracht gebruiken om een ​​lijst met alle te krijgen ingeschakeld verwijzingen:

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

Vervolgens om sites op Debian / Ubuntu uit te schakelen / in te schakelen:

  • Naar onbruikbaar maken een site: als de config in is conf.d, hernoem het bestand om niet langer een .conf achtervoegsel; of als in sites-enabled, verplaats het uit sites-enabled.

  • Naar in staat stellen een site, de beste manier zou zijn om het naar te verplaatsen /etc/nginx/conf.d, en hernoem om een ​​te hebben .conf achtervoegsel.

Postscriptum Waarom denk ik dat van Debian include /etc/nginx/sites-enabled/*; is het slecht? Probeer een aantal bestanden in die map te bewerken en gebruik de emacs maak de back-upbestanden (met de ~ achtervoegsel), vraag het mij dan opnieuw.


3
2017-08-26 20:45



Ik wil er graag op wijzen dat de kwestie met dit antwoord ligt in twee onjuiste veronderstellingen met betrekking tot Debian en derivaten: 1) Het doel van conf.d directory is server-brede configuratie zoals die voor modules, plug-ins, fastcgi-handlers, enz. en expliciet niet om host- / vhost-configuraties op te slaan in en 2) Eén zou niet bewerk alle bestanden in sites-enabled  serverfault.com/a/825297/86189 - Bojan Markovic
@BojanMarkovic, je hebt het mis. U kunt geen serverbrede configuraties gebruiken conf.d, omdat het is opgenomen in dezelfde context als het sites-enabled een - http-niveaucontext, dus de richtlijnen voor modules en plug-ins zijn mogelijk niet van toepassing. Evenzo, uw aanname dat men geen bestanden mag bewerken sites-enabled is slechts wishful thinking - er zijn geen dergelijke instructies in de distro of binnen de directory, dus het is puur jouw aanname, die op geen enkele manier wordt afgedwongen door de distributie, dus je hebt allerlei problemen die eruit voortvloeien, bijvoorbeeld , stackoverflow.com/q/45852224/1122270. - cnst
Het punt waar u op wees heeft absoluut geen verband met dit punt. Ik heb ongelijk conf.d zoals waarschijnlijk de Debian-onderhouder van Nginx is (of misschien wordt het bewaard voor compatibiliteit met upstream). Over het niet bewerken van bestanden in sites-enabled, het is niet wishful thinking, maar de veronderstelde worflow onder Apache die ze probeerden te emuleren op Nginx. In apache is het vrij duidelijk vanwege het bestaan ​​van a2ensite en a2dissite scripts. Jammer genoeg wordt er niets van dit soort voorzien voor Nginx, wat laat zien hoe laag de onderhoudskwaliteit van dat pakket op Debian is. Beide hebben geen documentatie, waar. - Bojan Markovic
..Ik zal je dat geven (in dit opzicht missen de documenten hopeloos). Je bent echter de eerste persoon met webservers op Debian waarmee ik heb gesproken en die daardoor in de war was. Gewoon een simpel ls -al sites-enabled in Apache of Nginx is te zien dat de bestaande bestanden in de map symlinks zijn van -available, idem voor modules onder Apache, samen met meegeleverd a2enmod/a2dismod scirpts. - Bojan Markovic
@pzrq, je vergelijkt veel niet-gerelateerde dingen; de beschikbare / ingeschakeld heeft niets te maken met apache noch debian; bij gebrek aan bewijs van het tegendeel, is het in feite gewoon iets dat een of andere onderhouder op de juiste tijd op het juiste moment sloop toen niemand keek, en het bleef hangen; er is weinig reden om het te blijven gebruiken als je al de middelen besteedt om over te stappen naar nginx, wat al zou vereisen dat config rewrites om .htaccess kwijt te raken, bijvoorbeeld - zou je configuratie beter kunnen standaardiseren met alle wolken en distro's in gedachten , wat gemakkelijk genoeg is met conf.d zoals het is. - cnst


Een andere methode is om het configuratiebestand van de site te hernoemen naar iets dat eindigt zonder .conf

Bijv. sudo mv mysite.conf mysite.conf.disabled

Laad vervolgens nginx opnieuw, en die vhost zal terugvallen naar de standaardwaarde.


0
2018-05-19 03:15



het is altijd fijn om de opdracht nginx_modsite te gebruiken, je kunt de lijst, de locatie, de ingeschakelde site veel eenvoudiger en sneller maken dan het bestand elke keer te hernoemen @Pyrite - Ghassen Telmoudi
Het lijkt er niet op dat nginx_modsite standaard is geïnstalleerd. Toch is het hernoemen van bestanden een aandelenoptie. Bovendien heb ik mijn antwoord als een alternatieve methode voorgelezen, niet de beste methode @ GhassenTelmoudi - Pyrite
@Pyrite Op Ubuntu 14.04 doet de extensie niets omdat nginx.conf sites-enabled bevat include /etc/nginx/sites-enabled/*; het bevat alleen confir als *.conf - Bojan Markovic
@GhassenTelmoudi als het script dat je blijft noemen, is een script van een derde partij, dat zelfs niet is ingepakt door de makers (ubuntu) in het nginx-pakket, je opmerking suggereert om een ​​script van derden te gebruiken via een (één regel) opdrachtregelalternatief. Dit is hoe beveiligingskwetsbaarheden en onnodig complexe afhankelijkheidsbomen worden gecreëerd. - scones
@BojanMarkovic, ja, Debian en Ubuntu zijn slecht - serverfault.com/a/870618/110020 - hun wildcast van elk bestand is vooral lastig als u bestanden rechtstreeks in bewerkt sites-enableden uw editor maakt de back-upbestanden. - cnst