우리 모두는 리눅스에서 아파치를 사용하여 웹 사이트를 활성화하는 방법을 알고 있습니다. 우리 모두 a2ensite 명령 사용에 동의한다고 확신합니다.
불행히도 Nginx에는 기본적으로 동등한 명령이 없지만 우분투에 일부 패키지를 설치하여 사이트를 활성화 / 비활성화하고 나열 할 수있었습니다.
문제는이 패키지의 이름을 기억하지 못한다는 것입니다.
내가 무슨 말을하는지 아는 사람 있나요?
이 패키지의 이름과 명령 이름을 알려주십시오.
우리 모두는 리눅스에서 아파치를 사용하여 웹 사이트를 활성화하는 방법을 알고 있습니다. 우리 모두 a2ensite 명령 사용에 동의한다고 확신합니다.
불행히도 Nginx에는 기본적으로 동등한 명령이 없지만 우분투에 일부 패키지를 설치하여 사이트를 활성화 / 비활성화하고 나열 할 수있었습니다.
문제는이 패키지의 이름을 기억하지 못한다는 것입니다.
내가 무슨 말을하는지 아는 사람 있나요?
이 패키지의 이름과 명령 이름을 알려주십시오.
답변:
nginx
Ubuntu 리포지토리에서 패키지를 설치 한 경우 두 개의 디렉토리가 있습니다.
/etc/nginx/sites-enabled
그리고 /etc/nginx/sites-available
.
기본 nginx 구성 /etc/nginx/nginx.conf
에는 다음 줄이 있습니다.
include /etc/nginx/sites-enabled/*.conf;
따라서 기본적으로 사용 가능한 모든 가상 호스트를 나열하려면 다음 명령을 실행할 수 있습니다.
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
이 스크립트 /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
당신을 언급 nginx_ensite
하고 nginx_dissite
있습니까?
당신이 사용하는 경우 의 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;
}
그러나 데비안 / 우분투 파생어를 사용하는 경우,에 추가 conf.d
하여 악의적 인 비표준sites-available
및 sites-enabled
디렉토리가있을 수 있습니다. 일부 파일은 확장명에 관계없이 느리게 포함될 수 있습니다.
http {
…
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
따라서 데비안 / 우분투에서는 먼저 사이트 설정이 어디에 있는지 알아야합니다.
다음 명령을 사용 하여 지정된 마스크와 일치하는 모든 일반 파일을 찾도록 실행 하여 사용 가능한 모든 사이트 목록을 얻을 수 있습니다 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
하고 백업 파일 ( ~
접미사 포함)을 작성한 후 다시 요청하십시오.
conf.d
디렉토리 의 목적은 모듈, 플러그인, fastcgi 핸들러 등의 서버 전체 구성이며 명시 적으로 호스트를 저장 하지 않습니다 / 2) 하나와의 가상 호스트 설정 하지 말아야 의 모든 파일을 편집 sites-enabled
serverfault.com/a/825297/86189
conf.d
은 sites-enabled
단일 http
수준 컨텍스트 와 동일한 컨텍스트에 포함되어 있으므로 모듈 및 플러그인 지시문이 적용되지 않을 수 있으므로 서버 전체 구성을 제공 할 수 없습니다. 마찬가지로, 파일을 편집해서는 안된다는 가정 sites-enabled
은 단지 희망적인 생각입니다. 배포판이나 디렉토리 내에 그러한 지침이 없기 때문에, 그것은 배포에 의해 시행되지 않는 순수한 가정입니다. stackoverflow.com/q/45852224/1122270 와 같이 모든 종류의 문제가 발생합니다 .
conf.d
아마도 Nginx의 데비안 관리자 (또는 아마도 업스트림과의 호환성을 위해 유지)에 대해 잘못 되었습니다. 에서 파일을 편집 sites-enabled
하지 않는 것에 관해서는 아파치에서 Nginx를 모방하려고 시도한 웜 흐름이 바람직하지 않습니다. 아파치에서는 존재 a2ensite
와 a2dissite
스크립트 로 인해 매우 분명 합니다. 불행히도 Nginx에는 데비안에서 해당 패키지의 유지 관리 품질이 얼마나 낮은지를 보여주는 종류가 없습니다. 둘 다 문서화가 부족하다.
ls -al sites-enabled
Apache 또는 Nginx에서 간단한 것은 디렉토리의 기존 파일 -available
이 제공된 a2enmod
/ a2dismod
scirpts 와 함께 Apache의 모듈에 대한 심볼릭 링크 인 것을 보여줍니다 .
conf.d
있습니다.
또 다른 방법은 사이트의 구성 파일 이름을 .conf없이 끝나는 이름으로 바꾸는 것입니다.
예 : sudo mv mysite.conf mysite.conf.disabled
그런 다음 nginx를 다시로드하면 해당 호스트가 기본값으로 돌아갑니다.
include /etc/nginx/sites-enabled/*;
에는 conf 디렉토리 만 포함되어 있기 때문에 nginx.conf에 사이트가 활성화되어 있습니다.*.conf
sites-available
과 sites-enabled
장점과 사용을 갖는 한 가지 않을 것이다. 누군가는 아마도 nginx conf의 실제 공격 라인에 대한 버그 보고서를 제출해야하며 아마도 /etc/nginx/sites-enabled/*.conf;
감독 일 것입니다. 그러나 데비안 워크 플로를 존중한다면 sites-available
어쨌든 파일을 편집 하고 활성화하려는 파일을 심볼릭 링크 할 것 sites-enabled
입니다.