Nginx 소스 코드 · 자동 스 크 립 트 편 정독 (1) 설정 옵션 을 어떻게 읽 습 니까?

7915 단어 Nginx
더 읽 기
Nginx 소스 코드 · 자동 스 크 립 트 편 정독 (1) 설정 옵션 을 어떻게 읽 습 니까?
Author: Poechant
Blog: blog.CSDN.net/Poechant
Email: zhongchao.ustc#gmail.com (#->@)
Date: March 4th, 2012
Copyright © 유 대 · Poechant 설치 Nginx 전에 (즉 실행 make 스 크 립 트 를 실행 하기 전에) 먼저 환경 검사 및 파일 생 성 을 포함 하여 설 치 된 설정 준 비 를 합 니 다.이 작업 들 은 자동 스 크 립 트 로 이 루어 졌 다.절대 다수의 소프트웨어 와 마찬가지 로 Nginx 의 자동 스 크 립 트 입 구 는 configure 라 는 파일 입 니 다.configure 을 제외 한 다른 자동 스 크 립 트 는 auto 디 렉 터 리 에 있 습 니 다.분석 configure 스 크 립 트 소스 코드 를 통 해 알 수 있 듯 이 configure 디 렉 터 리 에 있 는 몇 개의 자동 스 크 립 트 를 먼저 실 행 했 습 니 다. 다음 과 같 습 니 다.
. auto/options
. auto/init
. auto/sources

이 중 auto 스 크 립 트 를 실행 하여 설정 옵션 을 설정 합 니 다.다음은 스 크 립 트 가 어떻게 작 동 하 는 지 점차적으로 분석 할 것 이다.
1 읽 기 auto/options 설정 매개 변수
먼저 N 다 변 수 를 설명 한 다음 에 가장 중요 한 부분 은 이 부분 부터 시작 합 니 다.
opt=

for option
    do
    ...
done

이 부분 은 실제 실행 auto/options 을 처리 할 때 가지 고 있 는 매개 변수 옵션 입 니 다. configure 순환 할 때마다 매개 변수 옵션 option 입 니 다../configure 순환 체 위 에 전체 for 변수 가 있 음 을 주의해 야 합 니 다.이 순환 체 내의 첫 번 째 문 구 는 가장 중요 하 다. 그것 은:
opt="$opt `echo $option | sed -e \"s/\(--[^=]*=\)\(.* .*\)/\1'\2'/\"`"

이 문 구 를 순환 적 으로 실행 한 후 for 의 값 은 빈 칸 으로 구 분 된 매개 변수 목록 입 니 다.그 다음 에 순환 체 에서 다음은 하나 opt 로 매개 변수 값 을 얻 을 수 있 습 니 다. 다음 과 같 습 니 다.
case "$option" in
    -*=*) value=`echo "$option" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;;
       *) value="" ;;
esac

그 의 미 는 opt 값 을 매개 변수 옵션 값 으로 하고, 옵션 값 이 case-esac 패턴 과 일치 하지 않 으 면 value 값 은 -*=* 이라는 것 이다.다음 value 문 구 는 매개 변수의 유형 과 일치 합 니 다.
    case "$option" in
        --help)                          help=yes                   ;;
        --prefix=)                       NGX_PREFIX="!"             ;;
        --prefix=*)                      NGX_PREFIX="$value"        ;;
        --sbin-path=*)                   NGX_SBIN_PATH="$value"     ;;
        --conf-path=*)                   NGX_CONF_PATH="$value"     ;;
        ...
    esac

각 일치 하 는 분기 문 에서 변 수 를 설정 합 니 다.이 변 수 는 "" 스 크 립 트 의 시작 부분 에 기본 값 을 부여 합 니 다. 그 중에서 모듈 설정 변 수 는 case-esac 기본 값 으로 열 리 고 auto/options 기본 값 으로 닫 힙 니 다.그러나 이들 의 오픈 여 부 는 이 YESNO 문구 에 의 해 결정 된다.설치 와 관련 된 옵션 변수 도 여기에 할당 되 어 있 습 니 다. 예 를 들 어:auto/options 매개 변수 값 부여 case-esac prefix 매개 변수 값 부여 NGX_PREFIX sbin-path 매개 변수 값 부여 NGX_SBIN_PATH conf-path 매개 변수 값 부여 NGX_CONF_PATH error-log-path 매개 변수 값 부여 NGX_ERROR_LOG_PATH pid-path 매개 변수 값 부여 NGX_PID_PATH lock-path 미리 설 정 된 이러한 일치 에 부합 되 지 않 으 면 사용자 가 NGX_LOCK_PATH 스 크 립 트 를 사용 할 때 가지 고 있 는 매개 변수 가 잘못 되면 option 이 문 구 를 일치 시 킵 니 다.
*)
    echo "$0: error: invalid option \"$option\""
    exit 1

사용자 매개 변수 오 류 를 알려 주 고 스 크 립 트 를 실행 에서 종료 합 니 다.여러 차례 의 순환 을 거 쳐 configure 끝났다.
2 설정 auto/options 변수
모든 for-do-done 을 처리 한 후에 NGX_CONFIGURE 우리 가 위 에서 언급 한 바 와 같이 빈 칸 으로 분 단 된 설정 항목 값 이 되 고 option 변수 에 부 여 됩 니 다.
NGX_CONFIGURE="$opt"

3 도움말 정보 표시 여부 opt다음 문장 을 보십시오.
if [ $help = yes ]; then
cat << END
    …
END
    exit 1
fi

기본 적 인 상황 에서 NGX_CONFIGURE 변수 값 은 초기 화 할 때 configure 입 니 다.$help 옵션 에서 no 인 자 를 지정 하면 configure 인 자 는 help 이 고 $help 명령 을 실행 하여 큰 도움말 정 보 를 표시 한 다음 종료 합 니 다.
4 HTTP 기능 을 닫 을 지 여부
기본 적 인 상황 에서 yes 의 일부 기본 기능 이 열 립 니 다. 사용자 가 cat 인 자 를 지정 하면 변수 HTTP--without-http 로 할당 되 고 다음 코드 HTTP 의 문 구 는 실 행 됩 니 다.
if [ $HTTP = NO ]; then
    HTTP_CHARSET=NO
    HTTP_GZIP=NO
    HTTP_SSI=NO
    HTTP_USERID=NO
    HTTP_ACCESS=NO
    HTTP_STATUS=NO
    HTTP_REWRITE=NO
    HTTP_PROXY=NO
    HTTP_FASTCGI=NO
fi

5 윈도 플랫폼 에서 실행 할 지 여부
만약 에 명시 적 으로 NO 매개 변 수 를 지정 하면 변수 if-fi 는 현재 --crossbuild 순환 중의 NGX_PLATFORM 값, 즉 for-do-done 의 매개 변수 값 을 부여 합 니 다. 보통 "$value" 플랫폼 에서 사용 할 때 사용 할 수 있 습 니 다. 아래 의 문 구 를 보 세 요.
if [ ".$NGX_PLATFORM" = ".win32" ]; then
    NGX_WINE=$WINE
fi

지정 --crossbuild 하면 Windows 값 이 부 여 됩 니 다.
6 Nginx 프로필 경로--crossbuild=win32 의 인 자 를 불 러 올 때 NGX_WINE 인자 가 지정 되 지 않 으 면 configure 변 수 는 값 이 없 으 며, 아래 의 문 구 는 --conf-path 부 여 된 $NGX_CONF_PATH 결 성 된 값 입 니 다.그러나 나 는 노모 자 Igor Sysoev 학우 들 이 NGX_CONF_PATH 시작 부분 에서 다른 매개 변수 와 마찬가지 로 먼저 conf/nginx.conf 의 기본 값 을 지정 할 수 있다 고 생각 하고 있다.
NGX_CONF_PATH=${NGX_CONF_PATH:-conf/nginx.conf}

그리고 프로필 이 있 는 디 렉 터 리 를 가 져 옵 니 다:
NGX_CONF_PREFIX=`dirname $NGX_CONF_PATH`

매개 변수 auto/options 를 지정 하면 NGX_CONF_PATH 의 값 은 --conf-path=/home/michael/nginx/conf/nginx.conf 입 니 다.
7 Nginx 프로 세 스 ID 파일 과 잠 금 파일 경로
다음은 같은 방식 으로 초기 화 NGX_CONF_PREFIX/home/michael/nginx/conf, 대응 NGX_PID_PATH 매개 변수 NGX_LOCK_PATHconfigure, 그 부족 치 는 각각 --pid-path--lock-path 이다.
NGX_PID_PATH=${NGX_PID_PATH:-logs/nginx.pid}
NGX_LOCK_PATH=${NGX_LOCK_PATH:-logs/nginx.lock}

8 오류 로그 파일 경로
인자 logs/nginx.pid 를 지정 하면 logs/nginx.lock 변수의 값 이 지 정 됩 니 다. 아래 문장 에 따라 --error-log-path 를 지정 하면 NGX_ERROR_LOG_PATH 오류 로그 파일 이 필요 하지 않 습 니 다.표준 출력 이 아니 고 값 이 비어 있 으 면 결 성 값 stderr 으로 설정 합 니 다.
if [ ".$NGX_ERROR_LOG_PATH" = ".stderr" ]; then
    NGX_ERROR_LOG_PATH=
else
    NGX_ERROR_LOG_PATH=${NGX_ERROR_LOG_PATH:-logs/error.log}
fi

9 HTTP 관련 경로
NGX_HTTP_LOG_PATH=${NGX_HTTP_LOG_PATH:-logs/access.log}
NGX_HTTP_CLIENT_TEMP_PATH=${NGX_HTTP_CLIENT_TEMP_PATH:-client_body_temp}
NGX_HTTP_PROXY_TEMP_PATH=${NGX_HTTP_PROXY_TEMP_PATH:-proxy_temp}
NGX_HTTP_FASTCGI_TEMP_PATH=${NGX_HTTP_FASTCGI_TEMP_PATH:-fastcgi_temp}
NGX_HTTP_UWSGI_TEMP_PATH=${NGX_HTTP_UWSGI_TEMP_PATH:-uwsgi_temp}
NGX_HTTP_SCGI_TEMP_PATH=${NGX_HTTP_SCGI_TEMP_PATH:-scgi_temp}

10 펄 모듈NGX_ERROR_LOG_PATH 인 자 를 지정 하면 logs/error.log 변 수 는 설 정 됩 니 다.지정 한 값 이 절대 경로 나 지정 되 지 않 은 (비어 있 음) 이면 상대 경로 로 처리 하고 --with-perl_modules_path 로 설정 합 니 다.
case ".$NGX_PERL_MODULES" in
    ./*)
    ;;

    .)
    ;;

    *)
        NGX_PERL_MODULES=$NGX_PREFIX/$NGX_PERL_MODULES
    ;;
esac

11 소결
실행 NGX_PERL_MODULES 스 크 립 트 를 통 해 모든 설정 항목 이 해당 설정 변수 에 정확하게 해석 되 고 불 러 왔 습 니 다.
-
전재 "유대 의 CSDN 블 로그": blog. csdn. net / Poechant
-

좋은 웹페이지 즐겨찾기