Question Commande de site d'activation Nginx


Nous savons tous comment activer un site Web en utilisant Apache sur Linux. Je suis à peu près sûr que nous sommes tous d'accord pour utiliser la commande a2ensite.

Malheureusement, aucune commande équivalente par défaut n’est fournie avec Nginx, mais il est arrivé que j’ai installé un paquet sur Ubuntu qui m’a permis d’activer / désactiver des sites et de les lister.

Le problème est que je ne me souviens pas du nom de ce paquet.

Quelqu'un sait de quoi je parle?

S'il vous plaît dites-moi le nom de ce paquet et le nom de la commande.


104
2017-09-05 08:33


origine


L'affirmation à propos d'A2ensite n'est pas vraie pour CentOS - Iain


Réponses:


Si vous avez installé le nginx paquet des référentiels Ubuntu, vous aurez deux répertoires.

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

Dans la configuration principale de nginx, /etc/nginx/nginx.conf, vous avez la ligne suivante:

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

En résumé, pour répertorier tous les hôtes virtuels disponibles, vous pouvez exécuter la commande suivante:

ls /etc/nginx/sites-available

Pour activer l'un d'entre eux, exécutez la commande suivante:

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

Les scripts fournis avec Apache sont fondamentalement de simples wrappers de shell qui font quelque chose de similaire à ce qui précède.

Après avoir lié les fichiers, n'oubliez pas de lancer sudo service nginx reload/ service nginx reload


128
2017-09-05 08:49



Oui, je sais comment utiliser la ligne de commande, merci - Ghassen Telmoudi
Alors je ne suis pas sûr de ce que vous demandez vraiment. - pkhamre
n'oubliez pas de recharger le serveur nginx avec: sudo service nginx reload - Ricardo Martins
@pkhamre: Lorsque vous utilisez Apache, il existe deux scripts: a2ensite et a2dissite. Ils créent et suppriment simplement les liens symboliques que vous décrivez. Ils constituent donc un moyen plus rapide d'activer et de désactiver. - Mads Skjern
Merci pour les votes constants sur cette ancienne réponse. Si OP accepterait cette réponse, ce serait épique :) - pkhamre


Il suffit de créer ce script /usr/bin/nginx_modsite et le rendre exécutable.

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

Comment ça marche:

Pour lister tous les sites

$ sudo nginx_modsite -l

Pour activer le site "test_website"

$ sudo nginx_modsite -e test_website

Pour désactiver le site "test_website"

$ sudo nginx_modsite -d test_website

58
2017-12-18 14:58



Dans la fonction ngx_relaod, j'ai commenté la lecture et fait reload = "y" puisque je lance ceci via cron et que je ne veux pas du tout l'invite. Merci! - radtek
oui, c'est parfaitement logique, pouvez-vous me dire où avez-vous apporté le changement? - Ghassen Telmoudi
Un script assez volumineux pour envelopper certaines commandes standard d'une ligne. - tobltobs
@tobltobs De bons programmeurs écrivent du code, d'excellents programmeurs volent du code :) Cela fait une belle addition à ma collection de scripts d'imagerie de serveur. - rdev5
@GhassenTelmoudi en tant que script que vous continuez de mentionner est un script tiers, qui n'est même pas intégré par les créateurs (ubuntu) dans le package nginx, votre commentaire suggère d'utiliser un script tiers par rapport à une alternative en ligne de commande (une ligne). C’est ainsi que sont créées les vulnérabilités de sécurité et les arbres de dépendance inutilement complexes - scones


Parlez-vous de nginx_ensite et nginx_dissite?


29
2017-09-05 08:36



C'est à peine une réponse, est-ce? Ces commandes ne sont pas présentes sur mon installation de nginx, sur Ubuntu installé avec apt-get. Il semble que ce soit juste un script tiers: github.com/perusio/nginx_ensite - Mads Skjern
@MadsSkjern Si ceci est "à peine une réponse", alors la réponse acceptée ne l'est pas beaucoup non plus! - Michael Hampton♦
Tout d’abord, merci d’avoir répondu :) Et désolé pour mon commentaire, qui peut paraître choquant, alors que je voulais seulement souligner que ce n’était pas très utile pour moi (à l’époque), à ​​cause de cela, prenant trop lecteur. - Mads Skjern
Vous avez répondu avec deux commandes et une URL, et même sous la forme d'une question. En tant que personne peu expérimentée, votre réponse m'aurait envoyé googler. Peut-être que je trouverais un guide / tutoriel / démonstration utile en 2 minutes, peut-être que je regarderais autour pendant une heure et que je serais toujours confus. Ce qui m'aurait aidé à l'époque était: "Il existe ces outils nginx_ensite et nginx_dissite, il s'agit d'un script tiers, téléchargez-le à partir d'ici, et ils fonctionnent ainsi, exemple, exemple". La réponse de Ghassen est plus élaborée, plus introductive, plus utile. J'espère que tu comprends ce que je veux dire :) - Mads Skjern
@MadsSkjern Eh bien, vous auriez pu cliquer sur le lien. :) - Michael Hampton♦


NGINX

Si vous utilisez un des paquets officiels en amont de nginx de http://nginx.org/packages/, le meilleur moyen est de naviguer vers le /etc/nginx/conf.d répertoire, et renommez le fichier affecté pour qu’il .conf suffixe à avoir un autre pour désactiver le site:

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

Ou l'inverse pour l'activer:

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

C'est parce que la valeur par défaut /etc/nginx/nginx.conf a le suivant include directif:

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

Debian / Ubuntu

Cependant, si vous utilisez un dérivé de Debian / Ubuntu, alors en plus de conf.d, vous pouvez aussi avoir le mal non standard sites-available et sites-enabled répertoires dont certains fichiers peuvent être inclus sans tenir compte de leur extension:

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

En tant que tel, dans Debian / Ubuntu, vous devrez d’abord déterminer l’emplacement de la configuration du site.

  • Vous pouvez utiliser la commande suivante pour obtenir une liste de tous les disponible sites en exécutant find(1) pour trouver tous les fichiers réguliers correspondant au masque donné:

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

  • Vous pouvez utiliser la commande suivante pour obtenir une liste de tous les activée des sites:

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

Ensuite, pour désactiver / activer les sites sur Debian / Ubuntu:

  • À désactiver un site: si la configuration est en conf.d, il suffit de renommer le fichier pour ne plus avoir .conf suffixe; ou si dans sites-enabled, déplacez-le de sites-enabled.

  • À activer un site, le meilleur moyen serait de le déplacer /etc/nginx/conf.d, et renommer pour avoir un .conf suffixe.

P.S. Pourquoi je pense que Debian include /etc/nginx/sites-enabled/*; est le mal? Essayez d’éditer quelques fichiers dans ce répertoire et d’avoir votre emacs créer les fichiers de sauvegarde (avec le ~ suffixe), puis me redemande.


3
2017-08-26 20:45



Je voudrais souligner que le problème de cette réponse réside dans deux hypothèses erronées concernant Debian et ses dérivés: 1) Le but de conf.d le répertoire est une configuration à l’échelle du serveur comme celle des modules, plugins, gestionnaires fastcgi, etc. et explicitement ne pas stocker les configurations hôte / hôte dans et 2) Un ne devrait pas éditer des fichiers dans sites-enabled  serverfault.com/a/825297/86189 - Bojan Markovic
@ BojanMarkovic, vous avez tort. Vous ne pouvez pas servir de configurations à l’échelle du serveur dans conf.d, car il est inclus dans le même contexte que le sites-enabled un - http-level context, les directives module et plugin peuvent donc ne pas s'appliquer. De même, votre hypothèse selon laquelle il ne faut pas éditer de fichiers sites-enabled est simplement un vœu pieux - de telles instructions ne figurent pas dans la distribution, ni dans le répertoire. C’est donc votre supposition, qui n’est en aucun cas appliquée par la distribution. Vous avez donc toutes sortes de problèmes, par exemple: , stackoverflow.com/q/45852224/1122270. - cnst
La question que vous avez évoquée n’a absolument aucun lien avec cela. Je me trompe à propos de conf.d tel quel, probablement, le mainteneur Debian de Nginx (ou peut-être est-il conservé pour la compatibilité avec l'amont). A propos de ne pas éditer des fichiers dans sites-enabledCe n’est pas un voeu pieux, mais le supposé flux de travail sous Apache qu’ils ont essayé d’imiter sur Nginx. En apache c'est assez évident en raison de l'existence de a2ensite et a2dissite les scripts. Malheureusement, rien de la sorte n'est fourni pour Nginx, ce qui montre à quel point la qualité de maintenance de ce paquet est basse sur Debian. Les deux manquent de documentation, c'est vrai. - Bojan Markovic
..Je vais vous donner ça (les documents manquent cruellement à cet égard). Cependant, vous êtes la première personne à utiliser des serveurs Web sur Debian à qui j'ai été confondue. Juste un simple ls -al sites-enabled Apache ou Nginx montre que les fichiers existants dans le répertoire sont des liens symboliques de -available, idem pour les modules sous Apache, avec fourni a2enmod/a2dismod scirpements. - Bojan Markovic
@pzrq, vous assimilez beaucoup de choses non liées; le disponible / activé n'a rien à voir avec apache ni debian; à défaut de preuve du contraire, il s’agit fondamentalement de quelque chose que certains responsables ont inséré au bon endroit au bon moment, lorsque personne ne le regardait, et il est resté bloqué; il y a peu de raisons de continuer à l'utiliser si vous dépensez déjà les ressources nécessaires à la transition vers nginx, ce qui nécessiterait déjà une réécriture de la configuration pour se débarrasser de .htaccess, par exemple - pourrait également normaliser votre configuration avec tous les nuages ​​et toutes les distributions à l'esprit. , ce qui est assez facile avec conf.d comme si. - cnst


Une autre méthode consiste simplement à renommer le fichier de configuration du site en quelque chose qui se termine sans .conf

Par exemple. sudo mv mysite.conf mysite.conf.disabled

Rechargez ensuite nginx, et vhost reviendra à la valeur par défaut.


0
2018-05-19 03:15



il est toujours agréable d'utiliser la commande nginx_modsite, vous pouvez lister, désactiver, activer le site beaucoup plus facilement et rapidement que renommer le fichier à chaque fois @Pyrite - Ghassen Telmoudi
Il ne semble pas que nginx_modsite soit installé par défaut. Cependant, renommer des fichiers est une option d'achat d'actions. De plus, j'ai préfixé ma réponse comme une méthode alternative, pas la meilleure méthode @GhassenTelmoudi - Pyrite
@Pyrite Sous Ubuntu 14.04, l’extension n’a pas d’importance, car nginx.conf inclut les sites activés comme include /etc/nginx/sites-enabled/*; il ne comprend que conf dir comme *.conf - Bojan Markovic
@GhassenTelmoudi en tant que script que vous continuez de mentionner est un script tiers, qui n'est même pas intégré par les créateurs (ubuntu) dans le package nginx, votre commentaire suggère d'utiliser un script tiers par rapport à une alternative en ligne de commande (une ligne). C’est ainsi que sont créées les vulnérabilités de sécurité et les arbres de dépendance inutilement complexes. - scones
@ BojanMarkovic, oui, Debian et Ubuntu sont pervers - serverfault.com/a/870618/110020 - leur wildcast de n'importe quel fichier est particulièrement gênant si vous éditez des fichiers directement dans sites-enabledet votre éditeur crée les fichiers de sauvegarde. - cnst