[apache] 전체 httpd 구성을 어떻게 볼 수 있습니까?

httpd 설정의 전체 구성이 무엇인지 알아 내려고 노력 중입니다.

모든 구성 파일은 서로 다른 파일 (/etc/httpd/conf.d, httpd.conf, 다양한 모드 구성)에 흩어져 있습니다.

최종 httpd 구성을 나열하는 방법이 있습니까?
단일 파일의 전체 실행 설정 구성처럼?



답변

arco444에서 언급했듯이을 사용 apachectl -S하여 현재 구성에서 실행중인 VirtualHosts의 개요 apachectl -M를 표시하고 현재로드 된 모든 모듈을 표시 할 수 있습니다. httpd를 시작할 때 파싱되었습니다.) httpd 구성 파일일반적인 구조에 익숙해지는 것이 좋습니다 .

귀하의 질문에 특히 유의하십시오 : ‘주’아파치 구성 파일은 /etc/httpd/conf/httpd.conf(CentOS 6에 포함 된 저장소의 기본 httpd 설치의 221 행 영역에 있으며 게시물 태그를 기반으로 사용하고 있다고 가정합니다), ‘보조’구성 파일은에 있으며 /etc/httpd/conf.d기본 구성 파일에 명시 적으로 포함되어야합니다. 예를 들어 httpd.conf파일에서 ‘ Include‘ 라는 용어 를 검색하면 하위 디렉토리에있는 Include conf.d/*.conf모든 확장자 파일을 포함 하는 행 을 알파벳순으로 찾을 수 있으므로에서 구성 파일 구문 분석의 중요성에 익숙해지고 싶을 것입니다. 가능하다면 어떤 점..confconf.d

한편, vim과 같은 셸 기반 텍스트 편집기를 사용하는 경우 기본적으로 줄 번호 지정 및 구문 강조 표시를 사용하도록 설정하여 이러한 긴 구성 파일을 좀 더 쉽게 구문 분석하고 탐색 할 수 있도록하는 것이 좋습니다. , 홈 디렉토리에라는 파일을 만들고 .vimrc(또는 기존 디렉토리에 추가) 다음 줄을 추가하면됩니다.

set nu
syntax on


답변

Apache HTTP Server 문서에 설명 된대로

config define -DDUMP_CONFIG가 설정된 경우, mod_info는 서버 시작 중에 미리 구문 분석 된 구성을 stdout에 덤프합니다.

httpd -DDUMP_CONFIG -k start

DUMP_CONFIGmod_info활성화 필요 : a2enmod info!

Ubuntu에서 다음을 수행하십시오.

sudo apache2ctl -DDUMP_CONFIG

줄 번호를 제거하려면

sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$"

또는 파일로 리디렉션

sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$" > /path/to/dump.conf

알려진 제한

mod_info는 원래 구성 파일을 읽는 대신 구문 분석 된 구성을 읽어 정보를 제공합니다. 구문 분석 된 구성 트리가 생성되는 방식으로 인해 몇 가지 제한 사항이 있습니다.

  • 구문 분석 된 구성에 저장되지 않고 즉시 실행되는 지시문은 나열되지 않습니다. 여기에는 ServerRoot, LoadModule 및 LoadFile이 포함됩니다.
  • Include와 같이 구성 파일 자체를 제어하는 ​​지시문은 나열되지 않지만 포함 된 구성 지시문은 있습니다.
  • 댓글은 나열되지 않습니다. (이것은 기능으로 간주 될 수 있습니다.)
  • .htaccess 파일의 구성 지시문은 나열되지 않습니다 (영구 서버 구성의 일부를 형성하지 않기 때문에).
  • 와 같은 컨테이너 지시문은 일반적으로 나열되지만 mod_info는 닫는.
  • mod_perl과 같은 타사 모듈에서 생성 한 지시문은 나열되지 않을 수 있습니다.


답변

해당 목적으로 mod_info를 사용 하십시오 :
http://httpd.apache.org/docs/2.2/mod/mod_info.html

단점은 삭제 된 구성을 복구하는 데 필요하고 모듈을 아직로드하지 않은 경우 그다지 도움이되지 않는다는 것입니다.


답변

구성 파일을 평평하게하고 (기본적으로) 주석을 제거하고 (기본적으로) # FILE주석을 포함하는 스크립트 (alas, Perl; 용서하십시오)가 있습니다 . 따라서 어떤 파일에 원하는 파일이 있는지 알아낼 수 있습니다.

Oracle OHS에서도 사용되는 것으로 보이지만 Apache httpd로 작성했습니다.

https://github.com/cameronkerrnz/scriptorium/blob/master/httpd-dump-config

SSH 및 diff / meld / etc를 사용하여 다른 시스템의 구성을 비교하는 데 특히 유용합니다.

예:

httpd-dump-config | grep -i -e '# FILE:' -e servername -e serveralias
# FILE: /etc/httpd/conf/maintenance-curtain.conf
# FILE: /etc/httpd/conf.d/proxy.conf
# FILE: /etc/httpd/otago/secure-www.alias.conf
# FILE: /etc/httpd/conf.d/proxy.conf
    ServerName www.otago.ac.nz
    ServerAlias otago.ac.nz

다음은 diff (CLI) 및 meld (GUI)를 사용하는 예입니다.

diff -Bb <(httpd-dump-config) <(ssh root@revproxy2 httpd-dump-config)

meld <(httpd-dump-config) <(ssh root@revproxy2 httpd-dump-config) &

나는 수년 동안 많은 파일에 걸쳐 수천 줄의 구성이있는 구성을 탐색 할 때 이것을 많이 사용했습니다.


답변

너무 많은 Apache 구성을 유지해야했을 때 요청한대로 스크립트를 준비했습니다. 많은 도움이되었습니다.

awk -v pc=$APCALL '

  NR == 1 {
    if (pf != "") {
      print "### End of "  pf  " ###"
    }
    print "### "  FILENAME  " ###"
    pf = FILENAME
  }
  { if (pc || ( $1 !~ "^#" && $0 != "" ) ) {
       printf "%5d %s\n", NR, $0
    }
  }
  $1 ~ /^Include(Optional)?$/ {
    $1 = ""
    system("for ACF in " $0 "; do apache_config.sh $ACF; done" )
  }
  END {
      print "### End of "  pf  " ###"
  }
' "$@"

주석과 빈 줄을보고 싶다면 APCALL 환경 변수를 설정할 수 있습니다. 주의 사항 : ServerRoot에서 실행해야합니다.


답변