Pregunta Nginx habilitar el comando del sitio


Todos sabemos cómo habilitar un sitio web utilizando Apache en Linux. Estoy bastante seguro de que todos estamos de acuerdo en usar el comando a2ensite.

Desafortunadamente, no hay un comando equivalente por defecto que venga con Nginx, pero sucedió que instalé un paquete en Ubuntu que me permitió habilitar / deshabilitar sitios y enumerarlos.

El problema es que no recuerdo el nombre de este paquete.

¿Alguien sabe de lo que estoy hablando?

Por favor dígame el nombre de este paquete y el nombre del comando.


104
2017-09-05 08:33


origen


La afirmación sobre a2ensite no es cierta para CentOS - Iain


Respuestas:


Si ha instalado el nginx paquete de los repositorios de Ubuntu, tendrá dos directorios.

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

En la configuración principal de nginx, /etc/nginx/nginx.conf, tienes la siguiente linea:

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

Básicamente, para enumerar todos los hosts virtuales disponibles, puede ejecutar el siguiente comando:

ls /etc/nginx/sites-available

Para activar uno de ellos, ejecuta el siguiente comando:

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

Los scripts que vienen con Apache son básicamente simples envoltorios de shell que hacen algo similar a lo anterior.

Después de vincular los archivos, recuerde ejecutar sudo service nginx reload/ service nginx reload


128
2017-09-05 08:49



Sí, sé cómo usar la línea de comandos, gracias. - Ghassen Telmoudi
Entonces no estoy seguro de lo que realmente estás pidiendo. - pkhamre
recuerde volver a cargar el servidor nginx con: sudo service nginx reload - Ricardo Martins
@pkhamre: Al usar Apache hay dos scripts: a2ensite y a2dissite. Simplemente crean y eliminan los enlaces simbólicos que describe, por lo que son formas más rápidas de habilitar y deshabilitar. - Mads Skjern
Gracias por los constantes upvotes en esta vieja respuesta. Si OP aceptara esta respuesta sería épico :) - pkhamre


Solo crea este script /usr/bin/nginx_modsite y hacerlo ejecutable.

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

Cómo funciona:

Para listar todos los sitios

$ sudo nginx_modsite -l

Para habilitar el sitio "test_website"

$ sudo nginx_modsite -e test_website

Para deshabilitar el sitio "test_website"

$ sudo nginx_modsite -d test_website

58
2017-12-18 14:58



en la función ngx_relaod, comenté la lectura y simplemente hice reload = "y", ya que ejecuté esto a través de cron y no quise el aviso en absoluto. ¡Gracias! - radtek
Sí, tiene el sentido perfecto, ¿puedes decirme dónde hiciste el cambio? - Ghassen Telmoudi
Un script bastante grande para envolver algunos comandos estándar de una línea. - tobltobs
@tobltobs Los buenos programadores escriben código, los grandes programadores roban código :) Esto hace que sea un buen complemento para mi colección de scripts de imágenes de servidor. - rdev5
@GhassenTelmoudi ya que el script que sigue mencionando es un script de terceros, que ni siquiera los empaquetan los creadores (ubuntu) en el paquete nginx, su comentario sugiere usar un script de terceros en una línea de comandos (una línea) alternativa. Así es como se crean las vulnerabilidades de seguridad y los árboles de dependencia innecesariamente complejos. - scones


Te refieres a nginx_ensite y nginx_dissite?


29
2017-09-05 08:36



Esto es apenas una respuesta, ¿verdad? Estos comandos no están presentes en mi instalación de nginx, en Ubuntu instalado con apt-get. Parece que es solo un script de terceros: github.com/perusio/nginx_ensite - Mads Skjern
@MadsSkjern Si esto es "apenas una respuesta", entonces la respuesta aceptada tampoco es muy importante. - Michael Hampton♦
En primer lugar, gracias por responder :) Y disculpe mi comentario, que quizás suene ofensivo, cuando en realidad solo quería señalar que no me fue muy útil (en ese momento), porque suponía demasiado por parte del lector. - Mads Skjern
Respondió con dos comandos y una url, e incluso en forma de pregunta. Como alguien con mi bajo nivel de experiencia, tu respuesta me habría enviado a buscar en Google. Tal vez encuentre una guía / tutorial / demostración útil en 2 minutos, tal vez esté mirando alrededor por una hora y todavía esté confundido. Lo que me habría ayudado en ese entonces fue: "Existen estas herramientas nginx_ensite y nginx_dissite, es un script de terceros, descárguelo desde aquí y funcionan de esta manera, por ejemplo, ejemplo". La respuesta de Ghassen es más elaborada, más introductoria, más útil. Espero entiendas lo que quiero decir :) - Mads Skjern
@MadsSkjern Bueno, podría haber hecho clic en el enlace. :) - Michael Hampton♦


NGINX

Si estas usando Uno de los paquetes oficiales upstream de nginx. desde http://nginx.org/packages/, la mejor manera es navegar a la /etc/nginx/conf.d directorio, y renombrar el archivo afectado de tener un .conf sufijo para tener uno diferente para deshabilitar el sitio:

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

O lo contrario para habilitarlo:

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

Esto es porque el predeterminado /etc/nginx/nginx.conf tiene lo siguiente include directiva:

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

Debian / Ubuntu

Sin embargo, si está utilizando un derivado de Debian / Ubuntu, entonces además de conf.d, también puede tener el malvado no estándar sites-available y sites-enabled directorios, algunos archivos bajo los cuales se pueden incluir descuidadamente sin tener en cuenta su extensión:

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

Como tal, en Debian / Ubuntu, es posible que primero tenga que averiguar dónde se encuentra la configuración del sitio.

  • Podría usar el siguiente comando para obtener una lista de todos disponible sitios ejecutando find(1) para encontrar todos los archivos regulares que coincidan con la máscara dada:

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

  • Podría usar el siguiente comando para obtener una lista de todos habilitado sitios:

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

Luego, para deshabilitar / habilitar sitios en Debian / Ubuntu:

  • A inhabilitar un sitio: si la configuración está en conf.d, simplemente renombra el archivo para que ya no tenga un .conf sufijo; o si en sites-enabled, sacalo de sites-enabled.

  • A habilitar un sitio, la mejor manera sería moverlo a /etc/nginx/conf.d, y renombrarlo para tener un .conf sufijo.

PD ¿Por qué creo que Debian? include /etc/nginx/sites-enabled/*; es malvado Intente editar un par de archivos en ese directorio y tenga su emacs crear los archivos de copia de seguridad (con la ~ sufijo), entonces pregúntame otra vez.


3
2017-08-26 20:45



Me gustaría señalar que el problema con esta respuesta radica en dos suposiciones erróneas con respecto a Debian y los derivados: 1) El propósito de conf.d El directorio es una configuración de todo el servidor como la de módulos, complementos, controladores de fastcgi, etc. y explícitamente no para almacenar configuraciones de host / vhost en y 2) Uno no debería editar cualquier archivo en sites-enabled  serverfault.com/a/825297/86189 - Bojan Markovic
@BojanMarkovic, estás equivocado. No puede servir configuraciones de todo el servidor en conf.d, porque está incluido en el mismo contexto que el sites-enabled uno - http-contexto de nivel, por lo tanto, las directivas de módulo y plugin pueden no aplicarse. Del mismo modo, su suposición de que uno no debe editar archivos en sites-enabled es simplemente una ilusión, no hay instrucciones de este tipo dentro de la distribución, o dentro del directorio, por lo tanto, es simplemente su suposición, que de ninguna manera es impuesta por la distribución, por lo tanto, tiene todo tipo de problemas que surgen de ella, por ejemplo , stackoverflow.com/q/45852224/1122270. - cnst
El problema que mencionaste no tiene absolutamente ninguna conexión con esto. Estoy equivocado acerca de conf.d como es, probablemente, el mantenedor de Debian de Nginx (o tal vez se mantiene por compatibilidad con el flujo ascendente). Acerca de no editar archivos en sites-enabled, no es una ilusión, sino el supuesto flujo de trabajo de Apache que intentaron emular en Nginx. En apache es bastante obvio debido a la existencia de a2ensite y a2dissite guiones. Desafortunadamente, Nginx no proporciona nada de este tipo que muestre cuán baja es la calidad de mantenimiento de ese paquete en Debian. Ambos carecen de documentación, es cierto. - Bojan Markovic
.. Te daré eso (los documentos carecen abismalmente de esto). Sin embargo, usted es la primera persona que ejecuta servidores web en Debian con los que he hablado y esto se confundió con esto. Solo un simple ls -al sites-enabled Apache o Nginx muestran que los archivos existentes en el directorio son enlaces simbólicos de -available, ídem para módulos bajo Apache, junto con los provistos a2enmod/a2dismod scirpts. - Bojan Markovic
@pzrq, estás equiparando muchas cosas no relacionadas; lo disponible / habilitado no tiene nada que ver con apache ni debian; A falta de pruebas de lo contrario, es básicamente algo que un mantenedor se coló en el lugar correcto en el momento adecuado cuando nadie estaba mirando, y se atascó; hay pocas razones para continuar usándolo si ya está gastando los recursos para hacer la transición a nginx, que ya requeriría reescrituras de configuración para deshacerse de .htaccess, por ejemplo, también podría estandarizar su configuración con todas las nubes y distribuciones en mente , que es bastante fácil con conf.d como es. - cnst


Otro método es simplemente cambiar el nombre del archivo de configuración del sitio a algo que termina sin .conf

P.ej. sudo mv mysite.conf mysite.conf.disabled

Luego recargue nginx, y ese vhost volverá a la configuración predeterminada.


0
2018-05-19 03:15



siempre es bueno usar el comando nginx_modsite, puede listar, deshabilitar, habilitar el sitio de forma mucho más fácil y rápida, que cambiar el nombre del archivo cada vez que @Pyrite - Ghassen Telmoudi
No parece que nginx_modsite esté instalado de forma predeterminada. Sin embargo, renombrar archivos es una opción de compra de acciones. Además, prefijo mi respuesta como un método alternativo, no el mejor método @GhassenTelmoudi - Pyrite
@Pyrite En Ubuntu 14.04 la extensión no importa, ya que nginx.conf incluye sitios habilitados como include /etc/nginx/sites-enabled/*; solo incluye conf dir como *.conf - Bojan Markovic
@GhassenTelmoudi ya que el script que sigue mencionando es un script de terceros, que ni siquiera los empaquetan los creadores (ubuntu) en el paquete nginx, su comentario sugiere usar un script de terceros en una línea de comandos (una línea) alternativa. Así es como se crean las vulnerabilidades de seguridad y los árboles de dependencia innecesariamente complejos. - scones
@BojanMarkovic, sí, Debian y Ubuntu son malos - serverfault.com/a/870618/110020 - su difusión de cualquier archivo es especialmente problemático si editas archivos directamente en sites-enabled, y su editor crea los archivos de copia de seguridad. - cnst