배포판 전반에서 Nginx 구성 위치를 결정하는 방법

배포판 전반에서 Nginx 구성 위치를 결정하는 방법

저는 각 배포판의 저장소에 패키징하지 않고 최소한의 수동 설치만으로 Linux 배포판이나 FreeBSD에서 이상적으로 실행되는 프로젝트를 진행하고 있습니다. 여기에는 /etc/nginx/설치 스크립트와 함께 복사되는 Nginx 구성 파일이 포함되어 있습니다.

장애물: 모든 운영 체제가 이를 동일한 위치에 저장하는 것은 아닙니다. 내가 아는 모든 Linux에서는 그렇습니다. /etc/nginx/그러나 FreeBSD에서는 그렇습니다 /usr/local/etc/nginx/. (내 프로젝트에는 Nginx가 종속성으로 있고 Nginx는운영 체제 패키지 관리자를 통해 설치될 것으로 예상됩니다. )

그렇다면 구성 파일이 어디로 이동해야 하는지 프로그래밍 방식으로 결정하는 가장 좋은 방법은 무엇입니까?

답변1

가장 좋은 방법은 nginx에 직접 문의하는 것입니다.

nginx -t

기본 구성 파일을 테스트하고 해당 위치를 표시합니다(찾을 수 없으면 파일 경로 오류도 발생함).

예:

$ nginx -t
nginx: [emerg] open() "/opt/common/conf/nginx.conf" failed (2: No such file or directory)
nginx: configuration file /opt/common/conf/nginx.conf test failed

nginx -h-V 플래그를 사용할 수도 있습니다 . nginx -V구성 파일을 사용할 수 없는 경우 구성 파일은 아무런 영향을 미치지 않습니다.

이 기능을 프로그래밍 방식으로 사용하려면 필요한 프로그래밍 언어에 대한 설명서를 참조하세요. 쉘 명령을 실행하고 출력을 저장하는 방법을 찾고 있습니다.

다음은 Bash에서 스크립트를 작성하는 방법에 대한 예입니다.

NGINX_CONFIG_PATH=`nginx -t 2>&1 | grep -m1 -o '/.*.conf'`
cp $INPUT_FILE $NGINX_CONFIG_PATH

그것을 파괴:

  • 2>&1은 nginx STDERR 출력을 STDOUT으로 리디렉션하여 처리할 수 있도록 합니다.
  • grep의 -m1은 첫 번째 발생만 표시합니다.
  • -o 검색 범위를 정규식으로 좁힙니다.
  • /.*.conf는 .conf까지 /가 처음 나타나는 것을 검색합니다.

답변2

다양한 운영 체제를 기준으로 판단하는 것이 좋습니다.

if [ -d /etc/nginx ]; then 
    cp YOURFILE /etc/nginx/
elif [ -d /usr/local/etc/nginx/ ]; then
    cp YOURFILE /usr/local/etc/nginx/
else
    cp YOURFILE /some_other_dir/
fi

관련 정보