Pertanyaan Nginx memungkinkan perintah situs


Kita semua tahu cara mengaktifkan situs web menggunakan apache di linux. Saya cukup yakin bahwa kita semua setuju untuk menggunakan perintah a2ensite.

Sayangnya tidak ada perintah standar yang setara dengan Nginx, tetapi ternyata saya menginstal beberapa paket di ubuntu yang memungkinkan saya mengaktifkan / menonaktifkan situs dan mencantumkannya.

Masalahnya adalah saya tidak ingat nama paket ini.

Ada yang tahu apa yang saya bicarakan?

Tolong beri tahu saya nama paket ini dan nama perintahnya.


104
2017-09-05 08:33




Pernyataan tentang a2ensite tidak berlaku untuk CentOS - Iain


Jawaban:


Jika Anda telah menginstal nginx paket dari repositori Ubuntu, Anda akan memiliki dua direktori.

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

Dalam konfigurasi nginx utama, /etc/nginx/nginx.conf, Anda memiliki baris berikut:

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

Jadi pada dasarnya untuk mendaftar semua virtualhost yang tersedia, Anda dapat menjalankan perintah berikut:

ls /etc/nginx/sites-available

Untuk mengaktifkan salah satunya, jalankan perintah berikut:

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

Skrip yang datang dengan Apache pada dasarnya hanya shell pembungkus sederhana yang melakukan sesuatu yang mirip seperti di atas.

Setelah menautkan file, ingatlah untuk menjalankannya sudo service nginx reload/ service nginx reload


128
2017-09-05 08:49



Ya saya tahu cara menggunakan baris perintah, terima kasih - Ghassen Telmoudi
Maka saya tidak yakin apa yang sebenarnya Anda minta. - pkhamre
ingat untuk reload nginx server dengan: sudo service nginx reload - Ricardo Martins
@pkhamre: Saat menggunakan Apache ada dua skrip: a2ensite dan a2dissite. Mereka hanya membuat dan menghapus tautan simbolis yang Anda gambarkan, jadi mereka adalah cara cepat untuk mengaktifkan dan menonaktifkan. - Mads Skjern
Terima kasih atas upvote konstan pada jawaban lama ini. Jika OP akan menerima jawaban ini, itu akan menjadi epik :) - pkhamre


Buat saja skrip ini /usr/bin/nginx_modsite dan membuatnya bisa dieksekusi.

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

Bagaimana itu bekerja:

Untuk daftar semua situs

$ sudo nginx_modsite -l

Untuk mengaktifkan situs "test_website"

$ sudo nginx_modsite -e test_website

Untuk menonaktifkan situs "test_website"

$ sudo nginx_modsite -d test_website

58
2017-12-18 14:58



dalam fungsi ngx_relaod, saya berkomentar membaca dan hanya membuat reload = "y" karena saya menjalankan ini melalui cron dan tidak menginginkan perintah sama sekali. Terima kasih! - radtek
ya itu masuk akal, bisakah kamu memberitahuku di mana kamu membuat perubahan? - Ghassen Telmoudi
Skrip yang cukup besar untuk membungkus beberapa perintah satu baris standar. - tobltobs
@tobltobs Programmer yang baik menulis kode, programmer yang hebat mencuri kode :) Ini membuat tambahan yang bagus untuk koleksi skrip pencitraan server saya. - rdev5
@GhassenTelmoudi sebagai skrip yang terus Anda sebutkan adalah skrip pihak ketiga, yang bahkan tidak dikemas oleh pembuat (ubuntu) ke paket nginx, komentar Anda menyarankan untuk menggunakan skrip pihak ketiga melalui alternatif baris perintah (satu baris). Ini adalah bagaimana kerentanan keamanan dan pohon ketergantungan yang tidak perlu rumit dibuat - scones


Apakah Anda maksud nginx_ensite dan nginx_dissite?


29
2017-09-05 08:36



Ini nyaris bukan jawaban, kan? Perintah-perintah ini tidak ada pada instalasi nginx saya, pada Ubuntu diinstal dengan apt-get. Sepertinya itu hanya skrip pihak ke-3: github.com/perusio/nginx_ensite - Mads Skjern
@MadsSkjern Jika ini "hampir tidak ada jawaban" maka jawaban yang diterima tidak terlalu salah! - Michael Hampton♦
Pertama-tama, terima kasih untuk menjawab :) Dan maaf atas komentar saya, yang mungkin terdengar menyinggung, padahal sebenarnya saya hanya ingin menunjukkan bahwa itu tidak terlalu berguna bagi saya (pada saat itu), karena itu dengan asumsi terlalu banyak dari pembaca. - Mads Skjern
Anda menjawab dengan dua perintah dan url, dan bahkan dalam bentuk pertanyaan. Sebagai seseorang dengan tingkat pengalaman rendah saya, jawaban Anda akan mengirim saya ke sana googling. Mungkin saya akan menemukan panduan / tutorial / demo yang bermanfaat dalam 2 menit, mungkin saya akan mencari sekitar satu jam dan masih bingung. Apa yang akan membantu saya saat itu adalah: "Ada alat ini nginx_ensite dan nginx_dissite, ini adalah skrip pihak ketiga, unduh dari sini, dan mereka bekerja dengan cara ini, contoh, contoh". Jawaban Ghassen lebih rumit, lebih pengantar, lebih bermanfaat. Saya harap Anda mengerti maksud saya :) - Mads Skjern
@MadsSkjern Nah, Anda bisa saja mengeklik tautan. :) - Michael Hampton♦


NGINX

Jika Anda menggunakan salah satu paket upstream resmi nginx dari http://nginx.org/packages/, cara terbaik adalah menavigasi ke /etc/nginx/conf.d direktori, dan ganti nama file yang terpengaruh dari memiliki .conf akhiran untuk memiliki yang berbeda untuk menonaktifkan situs:

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

Atau sebaliknya untuk mengaktifkannya:

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

Ini karena default /etc/nginx/nginx.conf memiliki yang berikut ini include direktif:

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

Debian / Ubuntu

Namun, jika Anda menggunakan turunan Debian / Ubuntu, maka selain conf.d, Anda mungkin juga memiliki kejahatan tidak standar sites-available dan sites-enabled direktori, beberapa file di bawah yang mungkin dimasukkan sembarangan tanpa memperhatikan ekstensi mereka:

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

Dengan demikian, di Debian / Ubuntu, Anda mungkin harus mencari tahu di mana lokasi konfigurasi situs.

  • Anda bisa menggunakan perintah berikut untuk mendapatkan daftar semua tersedia situs dengan menjalankan find(1) untuk menemukan semua file biasa yang cocok dengan mask yang diberikan:

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

  • Anda bisa menggunakan perintah berikut untuk mendapatkan daftar semua diaktifkan situs:

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

Kemudian untuk menonaktifkan / mengaktifkan situs di Debian / Ubuntu:

  • Untuk nonaktifkan sebuah situs: jika konfigurasi berada conf.d, cukup ganti nama file agar tidak lagi memiliki .conf akhiran; atau jika dalam sites-enabled, pindahkan dari sites-enabled.

  • Untuk memungkinkan sebuah situs, cara terbaik adalah memindahkannya /etc/nginx/conf.d, dan beri nama untuk memiliki .conf akhiran.

P.S. Mengapa saya berpikir tentang Debian include /etc/nginx/sites-enabled/*; jahat? Cobalah mengedit beberapa file di direktori itu, dan miliki file Anda emacs buat file cadangan (dengan ~ akhiran), lalu tanya saya lagi.


3
2017-08-26 20:45



Saya ingin menunjukkan bahwa masalah dengan jawaban ini terletak pada dua asumsi yang keliru mengenai Debian dan turunannya: 1) Tujuan dari conf.d direktori adalah konfigurasi server-lebar seperti itu untuk modul, plugin, fastcgi handler dll dan secara eksplisit tidak untuk menyimpan konfigurasi host / vhost di dan 2) Satu jangan edit semua file di sites-enabled  serverfault.com/a/825297/86189 - Bojan Markovic
@BojanMarkovic, Anda salah. Anda tidak dapat melayani konfigurasi lebar server di conf.d, karena termasuk dalam konteks yang sama dengan sites-enabled satu - httpkonteks tingkat, jadi, modul dan instruksi plugin mungkin tidak berlaku. Demikian juga, asumsi Anda bahwa seseorang tidak seharusnya mengedit file sites-enabled adalah hanya angan-angan - tidak ada instruksi seperti itu dalam distro, atau di dalam direktori, jadi, itu murni asumsi Anda, yang sama sekali tidak ditegakkan oleh distribusi, jadi, Anda memiliki segala macam masalah yang timbul darinya, misalnya , stackoverflow.com/q/45852224/1122270. - cnst
Masalah yang Anda tunjukkan sama sekali tidak ada hubungannya dengan ini. Saya salah tentang conf.d seperti, mungkin, pengelola Debian dari Nginx (atau mungkin itu disimpan untuk kompatibilitas dengan hulu). Tentang tidak mengedit file sites-enabled, itu bukan angan-angan tetapi seharusnya memburuk di bawah Apache yang mereka coba tiru di Nginx. Dalam apache itu cukup jelas karena adanya a2ensite dan a2dissite skrip. Sayangnya tidak ada yang disediakan untuk Nginx yang menunjukkan betapa rendahnya kualitas pemeliharaan paket itu pada Debian. Keduanya kurang dokumentasi, benar. - Bojan Markovic
..Aku akan memberi Anda itu (docs abysmally kurang dalam hal ini). Namun Anda adalah orang pertama yang menjalankan server web di Debian yang pernah saya ajak bicara yang bingung dengan ini. Sederhana saja ls -al sites-enabled di Apache atau Nginx menunjukkan bahwa file yang ada di direktori adalah symlink dari -available, idem untuk modul di bawah Apache, bersama dengan disediakan a2enmod/a2dismod scirpts. - Bojan Markovic
@ pzrq, Anda menyamakan banyak hal yang tidak terkait; tersedia / diaktifkan tidak ada hubungannya dengan apache atau debian; bukti yang gagal sebaliknya, itu pada dasarnya hanya sesuatu yang beberapa pengelola menyelinap ke tempat yang tepat pada waktu yang tepat ketika tidak ada yang melihat, dan itu macet; ada sedikit alasan untuk terus menggunakannya jika Anda sudah menghabiskan sumber daya untuk transisi ke nginx, yang sudah membutuhkan penulisan ulang konfigurasi untuk menyingkirkan .htaccess, misalnya - mungkin juga menstandardisasi konfigurasi Anda dengan semua awan dan distro dalam pikiran , yang cukup mudah dengan conf.d dengan adanya. - cnst


Metode lain hanya untuk mengganti nama file konfigurasi situs menjadi sesuatu yang berakhir tanpa .conf

Misalnya. sudo mv mysite.conf mysite.conf.disabled

Kemudian reload nginx, dan vhost itu akan kembali ke default.


0
2018-05-19 03:15



selalu menyenangkan untuk menggunakan perintah nginx_modsite, Anda dapat mencantumkan, menonaktifkan, mengaktifkan situs lebih mudah dan lebih cepat, daripada mengganti nama file setiap kali @Pyrite - Ghassen Telmoudi
Tampaknya nginx_modsite tidak diinstal secara default. Namun mengganti nama file adalah opsi stok. Selain itu, saya menambahkan jawaban saya sebagai metode alternatif, bukan metode terbaik @GhassenTelmoudi - Pyrite
@Pyrite Pada Ubuntu 14.04 ekstensi tidak mater sebagai nginx.conf termasuk situs-enabled sebagai include /etc/nginx/sites-enabled/*; itu hanya mencakup dir conf sebagai *.conf - Bojan Markovic
@GhassenTelmoudi sebagai skrip yang terus Anda sebutkan adalah skrip pihak ketiga, yang bahkan tidak dikemas oleh pembuat (ubuntu) ke paket nginx, komentar Anda menyarankan untuk menggunakan skrip pihak ketiga melalui alternatif baris perintah (satu baris). Ini adalah bagaimana kerentanan keamanan dan pohon ketergantungan yang tidak perlu rumit dibuat. - scones
@BojanMarkovic, ya, Debian dan Ubuntu jahat - serverfault.com/a/870618/110020 - Wildcast dari file apa pun sangat merepotkan jika Anda mengedit file secara langsung sites-enabled, dan editor Anda membuat file cadangan. - cnst