Nginx에 구성 파일이 포함 된 순서는 고정적이거나 무작위입니까? 아파치는 명시 적으로 와일드 카드 문자가 알파벳 순서로 확장 된다고 명시하고있다 . Nginx에서는 이것이 적용되지 않는 것으로 보이며 매뉴얼은 그것에 대해 아무 것도 말하지 않습니다 .
내 설정에서 20_example.com
이전 00_default
에 포함되었으므로 로그 형식과 같은 공유 지시문을 정의하려는 목적을 상실합니다.
Nginx에 구성 파일이 포함 된 순서는 고정적이거나 무작위입니까? 아파치는 명시 적으로 와일드 카드 문자가 알파벳 순서로 확장 된다고 명시하고있다 . Nginx에서는 이것이 적용되지 않는 것으로 보이며 매뉴얼은 그것에 대해 아무 것도 말하지 않습니다 .
내 설정에서 20_example.com
이전 00_default
에 포함되었으므로 로그 형식과 같은 공유 지시문을 정의하려는 목적을 상실합니다.
답변:
nginx 소스 코드에 따르면 GLOB_NOSORT 매개 변수와 함께 glob () 함수를 사용 하므로 파일 포함 순서를 명확하게 설정할 수 없습니다.
2012 년 11 월 에 1.3.10에서 처음 으로 변경되었습니다 . 로부터 changefile :
마스크가있는 "include"지시문이 Unix 시스템에서 사용되면 포함 된 파일이 알파벳 순서로 정렬됩니다.
AD7six의 답변은 전적으로 정확하지 않습니다. 순서는 두 서버 블록이 동일한 "특성"을 갖는 경우에도 중요합니다 (예 : 둘 다 server_name에서 정규식을 사용하고 수신 요청이 둘 다 일치하는 경우).
server {
server_name ~^(www\.)?(?<domain>foo\.com|bar\.com|baz\.com)$;
...
}
과
server {
server_name ~^(www\.)?(?<domain>.+)$;
...
}
이 시나리오에서 두 서버 블록은 순서를 보장 할 수 없기 때문에 두 파일에 분산 될 수 없습니다.
OP가 log_format 순서를 지적함에 따라 사용자 정의 log_formats의 경우 두 가지 유형의 파일, log_formats가있는 일부 파일, 해당 log_formats를 사용하는 서버 블록이있는 일부 파일에 배치하면 결과는 다음과 같습니다. 반복 불가능한 구성.
우리가 손으로 만든 nginx 농장을 꼭두각시로 처음 옮길 때, 동일한 하드웨어 / 설정에서 nginx 설치가 처음부터 실패하기 시작했습니다 ./etc/nginx/* (- r) md5match와 동일한 이진으로 다른 결과를 생성합니다 (하나는 유효하지 않은 log_format 오류이고 다른 하나는 작동합니다). 우리는 log_format과 같은 일부 지시문에 대해 순서가 매우 중요하다는 것을 배웠습니다 .
conf.d / *에서 서버 블록 생성을 conf.d / * 다음에 포함 된 다른 폴더로 이동하여 문제를 해결했습니다.