Soru Nginx site komutunu etkinleştir


Hepimiz bir web sitesini linux üzerinde apache kullanarak nasıl etkinleştireceğimizi biliyoruz. Eminim a2ensite komutunu kullanmak konusunda hemfikiriz.

Ne yazık ki, Nginx ile varsayılan eşdeğer bir komut gelmiyor, ancak ubuntu'ya sitemi etkinleştirmem / devre dışı bırakmamı ve bunları listelememi sağlayan bir paket kurdum.

Sorun şu ki bu paketin adını hatırlamıyorum.

Ne hakkında konuştuğumu bilen var mı?

Lütfen bana bu paketin adını ve komut adını söyle.


106
2017-09-05 08:33


Menşei


A2ensite hakkındaki iddialar CentOS için doğru değil - Iain


Cevaplar:


Eğer yüklediyseniz nginx Ubuntu depolarından paketi, iki dizinleri olacak.

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

Ana nginx yapılandırmasında, /etc/nginx/nginx.conf, aşağıdaki satır var:

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

Temel olarak tüm kullanılabilir sanal sunucuları listelemek için aşağıdaki komutu çalıştırabilirsiniz:

ls /etc/nginx/sites-available

Bunlardan birini etkinleştirmek için aşağıdaki komutu çalıştırın:

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

Apache ile birlikte gelen betikler, temelde yukarıdaki gibi benzer bir şey yapan basit kabuklu paketleyicidir.

Dosyaları bağladıktan sonra koşmayı unutmayın sudo service nginx reload/ service nginx reload


130
2017-09-05 08:49



Evet, komut satırını nasıl kullandığını biliyorum. - Ghassen Telmoudi
O zaman gerçekten ne istediğinden emin değilim. - pkhamre
ile nginx sunucusunu yeniden yüklemeyi unutmayın: sudo service nginx reload - Ricardo Martins
@pkhamre: Apache kullanırken iki senaryo var: a2ensite ve a2dissite. Açıkladığınız sembolik bağları yaratır ve silerler, böylece daha hızlı ve etkinleştirme yolları vardır. - Mads Skjern
Bu eski cevaptaki sürekli artışlar için teşekkürler. OP bu cevabı kabul ederse epik olurdu :) - pkhamre


Sadece bu komut dosyasını oluştur /usr/bin/nginx_modsite ve çalıştırılabilir hale getirin.

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

Nasıl çalışır:

Tüm siteleri listelemek için

$ sudo nginx_modsite -l

"Test_website" sitesini etkinleştirmek için

$ sudo nginx_modsite -e test_website

"Test_website" sitesini devre dışı bırakmak için

$ sudo nginx_modsite -d test_website

59
2017-12-18 14:58



ngx_relaod işlevinde, okuyucuyu okudum ve sadece cron'la çalıştırdığımdan ve istemini istemediğim için reload = "y" yaptık. Teşekkürler! - radtek
evet, mükemmel bir anlam ifade ediyor, değişimi nerede yaptın söyler misin? - Ghassen Telmoudi
Bazı standart satır komutlarını sarmak için oldukça büyük bir betik. - tobltobs
@tobltobs İyi programcılar kod yazıyor, harika programcılar kod çalıyorlar :) Bu, sunucu görüntüleme komut dosyalarının koleksiyonuna hoş bir ekleme yapıyor. - rdev5
@GhassenTelmoudi, bahsettiğiniz betik olarak, nginx paketine yaratıcılar (ubuntu) tarafından paketlenmeyen bir üçüncü taraf senaryosudur, yorumunuz bir (bir satır) komut satırı alternatifi üzerinden üçüncü bir parti betiğini kullanmayı önerir. Güvenlik açıkları ve gereksiz karmaşık bağımlılık ağaçları nasıl yaratılır - scones


Sizden mi bahsediyorsunuz nginx_ensite ve nginx_dissite?


29
2017-09-05 08:36



Bu bir cevap değil, değil mi? Apt-get ile kurulan Ubuntu'daki nginx kurulumumda bu komutlar mevcut değil. Bu sadece bir 3. parti betiği gibi görünüyor: github.com/perusio/nginx_ensite - Mads Skjern
@MadsSkjern Eğer bu “sadece bir cevap” ise, o zaman kabul edilen cevap ya çok değildir! - Michael Hampton♦
Her şeyden önce, cevap için teşekkürler :) Ve belki de sadece benim için çok yararlı olmadığını işaret etmek istediğimde (belki de), çünkü çok rahatsız olduğunu düşündüğüm, belki de rahatsız edici sesler, benim yorumum için üzgünüm okuyucu. - Mads Skjern
İki komutla ve bir URL ile yanıtladınız, hatta bir soru şeklinde. Düşük deneyim düzeyime sahip biri olarak, cevabınız beni orada yönlendirmeye yolladı. Belki 2 dakika içinde yararlı bir rehber / öğretici / demo bulabilirim, belki bir saatliğine etrafa bakıyorum ve hala kafam karıştı. Bana yardımcı olacak olan şey şu oldu: "Bu araçlar nginx_ensite ve nginx_dissite var, bu bir 3. parti senaryosu, buradan indir, ve bu şekilde çalışıyorlar, örnek,". Ghassen'in cevabı daha ayrıntılı, daha tanıtıcı ve daha faydalıdır. Umarım ne söylemek istediğimi anladın :) - Mads Skjern
@MadsSkjern Peki, bağlantıyı tıklamış olabilirsiniz. :) - Michael Hampton♦


nginx

Kullanıyorsanız nginx'in resmi upstream paketlerinden biri itibaren http://nginx.org/packages/, en iyi yol /etc/nginx/conf.d dizinine gidin ve etkilenen dosyanın .conf Siteyi devre dışı bırakmak için farklı bir tanesine sahip olmak:

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

Veya bunu etkinleştirmek için tersi:

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

Bunun nedeni, varsayılan /etc/nginx/nginx.conf aşağıdaki var include direktif:

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

Debian / Ubuntu

Bununla birlikte, bir Debian / Ubuntu türevi kullanıyorsanız, ek olarak conf.dayrıca sahip olabilirsiniz kötü olmayan standart sites-available ve sites-enabled Dizinler, uzantılarına bakılmaksızın alttan içerilen bazı dosyalar şunlardır:

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

Bu nedenle, Debian / Ubuntu'da, ilk olarak site yapılandırmasının nerede bulunduğunu bulmanız gerekebilir.

  • Tümünün listesini almak için aşağıdaki komutu kullanabilirsiniz. mevcut siteleri çalıştırarak find(1) Verilen maskeyle eşleşen tüm normal dosyaları bulmak için:

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

  • Tümünün listesini almak için aşağıdaki komutu kullanabilirsiniz. etkin Siteler:

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

Daha sonra Debian / Ubuntu'daki siteleri devre dışı bırakmak / etkinleştirmek için:

  • için devre dışı bir site: yapılandırma içeriyorsa conf.d, artık dosyaya sahip olmak için dosyayı yeniden adlandırın .conf eki; ya da sites-enabled, onu dışarı taşı sites-enabled.

  • için etkinleştirme bir site, onu en iyi şekilde taşımak /etc/nginx/conf.dve sahip olmak için yeniden adlandırın .conf soneki.

Not; Neden Debian'ın include /etc/nginx/sites-enabled/*; kötülük nedir? Bu dizindeki birkaç dosyayı düzenlemeyi deneyin. emacs yedekleme dosyalarını ( ~ Soneki), sonra tekrar sor.


2
2017-08-26 20:45



Bu sorunun cevabının, Debian ve türevleriyle ilgili iki hatalı varsayımda yattığını belirtmek isterim: 1) Amaç; conf.d dizin, modüller, eklentiler, fastcgi işleyicileri vb. değil host / vhost konfigürasyonlarını saklamak ve 2) yapmamalı içindeki dosyaları düzenle sites-enabled  serverfault.com/a/825297/86189 - Bojan Markovic
@BojanMarkovic, yanılıyorsun. Sunucu çapında yapılandırmalar sunamazsınız. conf.dÇünkü aynı içerikte sites-enabled bir - http-level bağlam, modül ve eklenti direktifleri geçerli olmayabilir. Aynı şekilde, içinde dosya düzenleme olmaması gerektiği varsayımınız sites-enabled sadece arzulu bir düşüncedir - dağıtım içinde ya da dizinin içinde böyle bir yönerge yoktur, bu nedenle, dağıtım tarafından hiçbir şekilde uygulanmayan tamamen sizin varsayımınızdır, yani, bununla ilgili her türlü konuya sahip olursunuz, örn. , stackoverflow.com/q/45852224/1122270. - cnst
İşaret ettiğin sorunun kesinlikle bununla bağlantısı yok. Yanılıyor conf.d Muhtemelen, Nginx'in Debian bakıcısı olduğu gibi (veya belki de yukarı akış ile uyumluluk için saklanmış). Dosyaları düzenleme hakkında sites-enabledBu, Nginx'te taklit etmeye çalıştıkları Apache'nin altındaki hayal kırıklığı düşüncesi değil. Apache'de var olmasından dolayı oldukça açık a2ensite ve a2dissite senaryo. Ne yazık ki, bu paketin bakım kalitesinin Debian'da ne kadar düşük olduğunu gösteren Nginx için bir şey yok. Her ikisi de belgelere sahip değil, doğru. - Bojan Markovic
..Onu size vereceğim (bu konuda abisal olarak eksikler). Ancak sen Debian üzerinde web sunucuları çalıştıran ilk kişisin, bununla karıştırıldığını söyledim. Sadece basit ls -al sites-enabled Apache'de veya Nginx'de, dizindeki mevcut dosyaların symlinks olduğunu gösterir. -availablesağlanan Apache altındaki modüller için ditto a2enmod/a2dismod scirpts. - Bojan Markovic
@pzrq, pek çok alakasız şeyi eşitliyorsunuz; Mevcut / etkin olan, apache veya debian ile ilgisi yoktur; Aksine delil yetersizliği, temelde sadece bir bakıcının kimsenin bakmadığı bir zamanda doğru yere doğru sırıttığı bir şeydi ve sıkışmıştı; Zaten kaynakların halihazırda .gtaccess'ten kurtulmak için yapılandırma yeniden yazmalarını gerektirecek olan nginx'e geçiş yapmak için kullanması için az sebep var - örneğin, yapılandırmanızı tüm bulutlarla ve dağıtımlarda da standartlaştırabilir ile yeterince kolay conf.d olduğu gibi kullanıldı. - cnst


Başka bir yöntem sadece sitenin yapılandırma dosyasını .conf olmadan bitecek bir şeye yeniden adlandırmaktır

Örneğin. sudo mv mysite.conf mysite.conf.disabled

Sonra nginx'i yeniden yükleyin ve bu vhost varsayılana geri dönecektir.


0
2018-05-19 03:15



nginx_modsite komutunu kullanmak her zaman güzel, listeyi, devre dışı bırakma, etkinleştirilmiş siteyi çok daha kolay ve hızlı bir şekilde her zaman @Pyrite dosyasına yeniden adlandırabilirsiniz - Ghassen Telmoudi
Nginx_modsite'nin varsayılan olarak yüklendiği görünmüyor. Ancak dosyaları yeniden adlandırmak bir hisse senedi seçeneğidir. Ayrıca, yanıtımı alternatif bir yöntem olarak önledim, en iyi yöntem değil @GhassenTelmoudi - Pyrite
@Pyrite Ubuntu 14.04'te uzantı, nginx.conf'un siteler için etkin olarak içerildiği gibi değil include /etc/nginx/sites-enabled/*; sadece conf dir olarak içerir *.conf - Bojan Markovic
@GhassenTelmoudi, bahsettiğiniz betik olarak, nginx paketine yaratıcılar (ubuntu) tarafından paketlenmeyen bir üçüncü taraf senaryosudur, yorumunuz bir (bir satır) komut satırı alternatifi üzerinden üçüncü bir parti betiğini kullanmayı önerir. Güvenlik açıkları ve gereksiz karmaşık bağımlılık ağaçları nasıl yaratılır. - scones
@BojanMarkovic, evet, Debian ve Ubuntu kötülüktür - serverfault.com/a/870618/110020 - Doğrudan dosyaları düzenlerseniz, herhangi bir dosyanın kendi wildcast özellikle zahmetli sites-enabledve editörünüz yedek dosyaları oluşturur. - cnst