سؤال تمكين Nginx أمر الموقع


نحن جميعا نعرف كيفية تمكين موقع على شبكة الانترنت باستخدام اباتشي على لينكس. أنا متأكد من أننا جميعًا نتفق على استخدام الأمر a2ensite.

للأسف ، لا يوجد أمر تعادل افتراضي يأتي مع Nginx ، ولكن حدث أن قمت بتثبيت بعض الحزمة على ubuntu التي سمحت لي بتمكين / تعطيل المواقع وإدراجها.

المشكلة هي أنني لا أتذكر اسم هذه الحزمة.

أي شخص يعرف ما أتحدث عنه؟

من فضلك قل لي اسم هذه الحزمة واسم الأمر.


106
2017-09-05 08:33


الأصل


التأكيد على a2ensite غير صحيح لـ CentOS - Iain


الأجوبة:


إذا قمت بتثبيت nginx حزمة من مستودعات أوبونتو ، سيكون لديك دليلين.

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

في تكوين nginx الرئيسي ، /etc/nginx/nginx.conf، لديك السطر التالي:

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

لذلك ، في الأساس لسرد جميع virtualhosts المتاحة ، يمكنك تشغيل الأمر التالي:

ls /etc/nginx/sites-available

لتنشيط أحدها ، قم بتشغيل الأمر التالي:

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

البرامج النصية التي تأتي مع Apache هي ببساطة عبارة عن غلاف غلاف بسيط يقوم بعمل شيء مماثل لما سبق.

بعد ربط الملفات ، تذكر أن تعمل sudo service nginx reload/ service nginx reload


130
2017-09-05 08:49



نعم ، أعرف كيفية ذلك باستخدام سطر الأوامر ، شكرًا - Ghassen Telmoudi
إذن أنا غير متأكد مما تطلبه حقًا. - pkhamre
تذكر إعادة تحميل خادم nginx مع: sudo service nginx reload - Ricardo Martins
@ pkhamre: عند استخدام Apache ، يوجد نصان: a2ensite و a2dissite. فهي ببساطة تنشئ وتحذف الروابط الرمزية التي تصفها ، لذا فهي أسرع الطرق للتمكين والتعطيل. - Mads Skjern
شكرا ل upvotes المستمر على هذه الإجابة القديمة. إذا كانت OP ستقبل هذه الإجابة ، فستكون ملحمة :) - pkhamre


فقط قم بإنشاء هذا البرنامج النصي /usr/bin/nginx_modsite وجعلها قابلة للتنفيذ.

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

كيف تعمل:

لسرد جميع المواقع

$ sudo nginx_modsite -l

لتمكين الموقع "test_website"

$ sudo nginx_modsite -e test_website

لتعطيل الموقع "test_website"

$ sudo nginx_modsite -d test_website

59
2017-12-18 14:58



في وظيفة ngx_relaod ، علّقت بالقراءة وأعمل فقط reload = "y" منذ أن قمت بتشغيل هذا عبر cron ولم أكن أريد المطالبة على الإطلاق. شكر! - radtek
نعم ، إنها منطقية ، هل يمكنك أن تخبرني من أين أدخلت التغيير؟ - Ghassen Telmoudi
برنامج نصي كبير جدًا لتغليف بعض أوامر سطر واحد قياسية. - tobltobs
tobltobs المبرمجين جيدة كتابة رمز ، مبرمجين كبيرة سرقة رمز :) هذا يجعل إضافة لطيفة لمجموعتي من مخطوطات التصوير الخادم. - rdev5
GhassenTelmoudi كالنص الذي تذكره هو برنامج نصي لجهة خارجية ، والذي لا يتم حزمه حتى من قبل المبدعين (ubuntu) في حزمة nginx ، يقترح تعليقك استخدام برنامج نصي لجهة خارجية عبر سطر بديل (سطر واحد). هذا هو كيفية إنشاء الثغرات الأمنية وأشجار التبعية المعقدة غير الضرورية - scones


هل تشير الى nginx_ensite و nginx_dissite؟


29
2017-09-05 08:36



هذا بالكاد إجابة ، أليس كذلك؟ هذه الأوامر غير موجودة في تثبيت nginx ، على Ubuntu مثبت مع apt-get. يبدو أنه مجرد نص برمجي تابع لجهة خارجية: github.com/perusio/nginx_ensite - Mads Skjern
MadsSkjern إذا كان هذا "بالكاد جوابًا" ، فإن الإجابة المقبولة ليست واحدة من هذه الإجابات أيضًا! - Michael Hampton♦
بادئ ذي بدء ، نشكرك على الإجابة :) ونأسف على تعليقي ، الذي ربما يبدو مهينًا ، عندما كنت أريد فقط أن أشير إلى أنه لم يكن مفيدًا جدًا بالنسبة لي (في ذلك الوقت) ، نظرًا لأنه يفترض الكثير جدًا من قارئ. - Mads Skjern
أجبت مع اثنين من الأوامر وعنوان url ، وحتى في شكل سؤال. بصفتي شخصًا ذا مستوى منخفض من خبرتي ، فإن إجابتك سترسلني إلى googling. ربما سأجد دليلاً مفيدًا / برنامجًا تعليميًا / عرضًا توضيحيًا في دقيقتين ، ربما كنت سأبحث في جميع الأوقات لمدة ساعة وما زلت مضطربًا. ما كان من الممكن أن يساعدني في ذلك الوقت هو: "هناك هذه الأدوات nginx_ensite و nginx_dissite ، إنه برنامج نصي خاص بطرف ثالث ، قم بتنزيله من هنا ، وهم يعملون بهذه الطريقة ، على سبيل المثال ، مثال". جواب غصن أكثر تفصيلاً ، وأكثر استهلالية ، وأكثر فائدة. آمل أن تفهم ما أعنيه :) - Mads Skjern
MadsSkjern حسنا ، هل يمكن أن يكون النقر فقط على الرابط. :) - Michael Hampton♦


إنجن إكس

إذا كنت تستخدم واحدة من حزم المنبع الرسمية من nginx من عند http://nginx.org/packages/أفضل طريقة هي الانتقال إلى /etc/nginx/conf.d الدليل وإعادة تسمية الملف المتأثر من وجود ملف .conf لاحقة لوجود واحد مختلف لتعطيل الموقع:

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

أو العكس لتمكينه:

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

هذا لأن الافتراضي /etc/nginx/nginx.conf لديه ما يلي include التوجيه:

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

ديبيان / أوبونتو

ومع ذلك ، إذا كنت تستخدم مشتق Debian / Ubuntu ، فبالإضافة إلى ذلك conf.d، قد يكون لديك أيضا الشر غير قياسي sites-available و sites-enabled الدلائل ، قد تكون بعض الملفات التي بموجبها يتم تضمينها دون مراعاة لتمديدها:

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

على هذا النحو ، في Debian / Ubuntu ، قد تحتاج أولاً إلى معرفة مكان توصيف الموقع.

  • يمكنك استخدام الأمر التالي للحصول على قائمة بجميع متاح المواقع عن طريق تشغيل find(1) للعثور على جميع الملفات العادية التي تطابق القناع المحدد:

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

  • يمكنك استخدام الأمر التالي للحصول على قائمة بجميع تمكين مواقع:

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

ثم لتعطيل / تمكين المواقع على دبيان / أوبونتو:

  • إلى تعطيل موقع: إذا كان التكوين موجودًا conf.d، فقط إعادة تسمية الملف لم يعد لديك .conf لاحقة. أو في sites-enabledاخرجها من sites-enabled.

  • إلى مكن موقع ، فإن أفضل طريقة هي نقله إلى /etc/nginx/conf.d، وإعادة تسمية أن يكون لها .conf لاحقة.

ملاحظة لماذا أعتقد ديبيان include /etc/nginx/sites-enabled/*; هو الشر؟ حاول تحرير اثنين من الملفات في هذا الدليل ، ويكون لديك emacs إنشاء ملفات النسخ الاحتياطي (مع ~ لاحقة) ، ثم اسألني مرة أخرى.


2
2017-08-26 20:45



أود أن أشير إلى أن المسألة مع هذه الإجابة تكمن في افتراضين خاطئين بشأن دبيان ومشتقاته: 1) الغرض من conf.d الدليل هو تكوين على مستوى الخادم مثل ذلك للوحدات ، والمكونات الإضافية ، ومعالجات fastcgi وغيرها ، وبشكل صريح ليس لتخزين تكوينات المضيف / vhost في و 2) واحد لا يجب تحرير أي ملفات في sites-enabled  serverfault.com/a/825297/86189 - Bojan Markovic
BojanMarkovic ، أنت على خطأ. لا يمكنك تخديم تكوينات على مستوى الخادم بالكامل conf.d، لأنه يتم تضمينه في نفس السياق مثل sites-enabled واحد - httpمستوى الخط ، لذلك ، قد لا تنطبق إرشادات الوحدة النمطية والمكونات الإضافية. وبالمثل ، افتراضك أنه لا ينبغي لأحد تعديل الملفات فيه sites-enabled هو مجرد تفكير بالتمني - لا توجد مثل هذه التعليمات داخل التوزيعة ، أو داخل الدليل ، لذلك ، هو افتراضك خالص ، وهو لا يتم تنفيذه بأي حال من الأحوال بالتوزيع ، لذلك ، لديك كل أنواع القضايا الناشئة عنه ، على سبيل المثال ، stackoverflow.com/q/45852224/1122270. - cnst
المشكلة التي أشرت إليها ليس لها أي صلة بهذا. أنا مخطئ conf.d كما هو ، على الأرجح ، مشرف دبيان الخاص بـ Nginx (أو ربما يتم الاحتفاظ به من أجل التوافق مع المنبع). حول عدم تحرير الملفات في sites-enabled، إنه ليس تفكيرًا بالتمني ولكن من خلال worflow المفترض تحت Apache والذي حاولوا محاكاته على Nginx. في apache من الواضح تماما بسبب وجود a2ensite و a2dissite البرامج النصية. للأسف ، لا يتم تقديم أي شيء من هذا النوع لـ Nginx ، وهو ما يوضح مدى انخفاض جودة صيانة الحزمة في دبيان. كلاهما يفتقدان للوثائق ، صحيح. - Bojan Markovic
.. سأعطيك ذلك (تفتقر إلى المستندات بشكل سيء في هذا الصدد). ومع ذلك فأنت أول شخص يشغل خوادم الويب على دبيان لقد تحدثت إلى ذلك. فقط بسيط ls -al sites-enabled في أي من Apache أو Nginx يبين أن الملفات الموجودة في الدليل هي symlinks من -available، كما سبق للوحدات النمطية تحت Apache ، جنبا إلى جنب مع المقدمة a2enmod/a2dismod scirpts. - Bojan Markovic
@ pzrq ، أنت تساوي الكثير من الأشياء غير ذات الصلة ؛ التوفر / التمكين ليس له علاقة بـ apache ولا debian؛ فشل الأدلة على العكس ، انها في الاساس مجرد شيء تسلل بعض المربي في المكان المناسب في الوقت المناسب عندما كان ينظر لا أحد ، وأنه تمسك ؛ هناك سبب قليل لمواصلة استخدامه إذا كنت بالفعل تنفق الموارد للانتقال إلى nginx ، والتي تتطلب بالفعل إعادة كتابة التكوين للتخلص من .htaccess ، على سبيل المثال - قد توحيد التكوين الخاص بك مع كل الغيوم والموزعات في الاعتبار ، وهو سهل بما فيه الكفاية مع conf.d كما هي. - cnst


هناك طريقة أخرى لإعادة تسمية ملف تهيئة الموقع إلى شيء ينتهي بدون .conf

مثلا sudo mv mysite.conf mysite.conf.disabled

ثم أعد تحميل nginx ، وسيعود هذا الشبح إلى الوضع الافتراضي.


0
2018-05-19 03:15



من الأفضل دائمًا استخدام الأمر nginx_modsite ، يمكنك سرد ، تعطيل ، تمكين موقع أسهل بكثير وأسرع ، من إعادة تسمية الملف في كل مرةPyrite - Ghassen Telmoudi
لا يبدو أنه تم تثبيت nginx_modsite افتراضيًا. بعد إعادة تسمية الملفات هو خيار الأسهم. الى جانب ذلك ، بادرت بإجابتي كطريقة بديلة ، وليس أفضل طريقةGhassenTelmoudi - Pyrite
Pyrite على Ubuntu 14.04 التمديد لا تتعهد كما nginx.conf يتضمن تمكين المواقع كما include /etc/nginx/sites-enabled/*; يتضمن فقط conf dir كـ *.conf - Bojan Markovic
GhassenTelmoudi كالنص الذي تذكره هو برنامج نصي لجهة خارجية ، والذي لا يتم حزمه حتى من قبل المبدعين (ubuntu) في حزمة nginx ، يقترح تعليقك استخدام برنامج نصي لجهة خارجية عبر سطر بديل (سطر واحد). هذا هو كيفية إنشاء الثغرات الأمنية وأشجار التبعية المعقدة غير الضرورية. - scones
BojanMarkovic ، نعم ، ديبيان وأوبونتو هو الشر - serverfault.com/a/870618/110020 - إن ظهورهم في أي ملف مزعج بشكل خاص إذا قمت بتحرير الملفات مباشرة sites-enabledويقوم المحرر بإنشاء ملفات النسخ الاحتياطي. - cnst