쉘 스크립트를 사용하여 Apache 문서 루트 가져오기

쉘 스크립트를 사용하여 Apache 문서 루트 가져오기

저는 RPM을 생성 중이며 초기 단계에서 웹 애플리케이션 파일을 거기에 복사할 수 있도록 Apache의 문서 루트를 결정하려고 합니다.

먼저 Apache가 설치되어 있는지 확인합니다. Apache가 설치된 경우 스크립트는 문서 루트 매개변수가 포함되어 있는 httpd.conf 파일의 위치를 ​​찾습니다. 하지만 명령 반환을 처리하는 방법을 모르겠습니다 find / -name httpd.conf. 저는 쉘 스크립트와 RPM을 처음 사용합니다. 또한 이것이 가능한지 궁금합니다. 목표는 많은 수동 개입 없이 모든 시스템에 배포할 수 있도록 RPM을 갖는 것입니다. 아래는 내 계획에 대한 코드입니다. 아직 작동하지 않음

if [ "$(expr substr $(httpd -v) 17 6)" == "Apache"]; then
    echo "Apache is installed";
    find / -name httpd.conf
    //need to handle the return of find and store to a location var to be used on the next line
    grep -i 'DocumentRoot' $location/httpd.conf
    //need to store the return document root to a var
el
    echo "Apache is not installed";
fi

답변1

다른 파일을 포함하여 여러 개의 .conf 파일이 있을 수 있으므로 작업이 생각보다 어렵습니다.

출력을 확인하면 마일리지를 얻을 수 있습니다.

httpd -S또는 apachectl -S또는 apache2ctl -S(배포판에 따라 다름)

현재 정의된 가상 호스트의 이름과 해당 호스트가 정의된 위치에 대한 정보를 인쇄합니다.

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
_default_:443          a.example.com (/etc/httpd/conf.d/ssl.conf:74)
*:80                   is a NameVirtualHost
         default server b.example.com (/etc/httpd/conf/httpd.conf:1010)
         port 80 namevhost b.example.com (/etc/httpd/conf/httpd.conf:1010)

이는 가상 호스트가 /etc/httpd/conf.d/ssl.conf/etc/httpd/conf/httpd.conf

답변2

그런 것은 없습니다 apache's document root. 구성 파일에는 여러 사이트에 대한 여러 루트가 포함될 수 있습니다.

또한, 특히 기본 apache2가 수정된 경우 데이터를 복사하여 기존 설정을 깨뜨릴 수 있으므로 복사할 위치와 내용에 대해 매우 주의해야 합니다.

어쨌든 이 시나리오를 계속하려면 사용 a2query -s가능한 사이트를 확인하고 이를 사용하여 문서를 배치할 사이트를 찾을 수 있습니다. 사용할 수 없다면 a2queryapache2가 설치되어 있지 않은 것일 수 있습니다.

문서 루트 중 하나에 콘텐츠를 복사하는 경우 문서 루트 내의 특정 디렉터리 이름 아래에 모든 콘텐츠를 배치하세요.그리고아무것도 쓰기 전에 디렉토리가 존재하지 않는지 확인하십시오.


기존 Apache 설정에 삽입할 수 있는 HTML 기반 문서를 제공하는 다른 패키지를 살펴볼 수도 있습니다. 나는 이것을 할 수 있는 어떤 것도 모르지만 당신은 그럴 수도 있습니다.

RPM을 설치하는 시스템의 apache2 기본 설정이 "사용자 페이지"에 액세스하는 메커니즘을 지원하는 경우 패키지에 대한 새 사용자를 생성하고 거기에 문서를 넣을 수 있습니다. 물론 관리자는 이 메커니즘을 끌 수 있지만 그렇지 않은 경우 구성을 방해하지 않습니다. 또한 이 작업을 수행하기 위해 기록할 문서 루트를 찾을 필요가 없습니다(사용자가 하나 nginx또는 다른 서버를 설치한 경우 운이 좋게도 동일한 사용자 페이지 메커니즘을 사용할 수 있습니다).

답변3

OpenSuse 및 Ubuntu에서 성공적으로 사용했습니다.

find /etc/apache2 -name '*default*' -exec grep -sHin "documentroot.*www" {} \; | grep -v available

답변4

  1. Main DocumentRoot은 많은(아마 대부분의) Apache 관리자가 호스팅을 위해 VirtualHosts를 사용하는 웹 페이지의 위치일 뿐입니다.

예를 참조하세요:https://httpd.apache.org/docs/2.2/vhosts/index.html

또는:https://httpd.apache.org/docs/2.4/vhosts/index.html

  1. 루트()부터 시작하여 전체 시스템 파일을 검색하는 것은 /시간이 너무 많이 걸리기 때문에 정말 좋지 않은 생각입니다. 특히 서버에 다른 리소스가 설치되어 있는 경우(최악의 경우는 연결이 느리고 파일이 많은 네트워크 설치입니다) ).

일부 비표준 위치 에 대해 구성 httpd.conf(또는 구성하지 않음) 해야 할 수도 있습니다 .apache2.conf

관련 정보