위치의 nginx 설정 변수


37

nginx 구성을 최적화하려고하므로 하나의 변수를 설정할 수 있으며 모든 위치 경로가 자동으로 업데이트됩니다. 질문에 네 줄이 있습니다.

server_name php.domain.com;
root /srv/web/vhosts/php/web;
error_log /srv/web/vhosts/php/logs/error.log;
access_log /srv/web/vhosts/php/logs/access.log;

내가 달성하고자하는 것은 하나의 변수 (이 경우 'php')를 설정하고 구성에 포함시키는 것입니다.

set $variable "php";
server_name $variable.domain.com;
root /srv/web/vhosts/$variable/web;
error_log /srv/web/vhosts/$variable/logs/error.log;
access_log /srv/web/vhosts/$variable/logs/access.log;

그러나 nginx 가이 구성의 변수를 무시한다는 점은 솔기입니다. 내가 잘못했거나 위치 경로에서 변수를 사용할 수 없습니까?

답변:


58

변수는 어디에서나 선언하거나 지시문에서 사용할 수 없습니다.

set지시문 의 문서 는 다음과 같습니다.

Syntax:   set $variable value;
Default:  —
Context:  server, location, if

즉각적인 결과는 http블록 에서 사용자 정의 변수를 사용할 수 없다는 것 입니다.

업데이트 : 이 대화방 에서 AlexeyTen 과 토론하고 실험 한 후 .

  • access_log제한이있는 변수를 포함 할 수 있습니다. 그중에서도 버퍼링 부족과 선행 슬래시를 변수로 선언해서는 안됩니다 .
  • error_log 변수와 전혀 작동하지 않습니다.
  • root 지시문은 변수를 포함 할 수 있습니다.
  • server_name지시문 $hostname은 변수와 같은 표기법으로 엄격한 값만 허용 합니다.

1
access_log/ error_log변수로 작업하지만 몇 가지 제한이 있습니다. server_name변수를 포함 할 수 없습니다.
Alexey Ten

@AlexeyTen 내 답변을 다시 읽습니다. 맞춤 변수 에서는 작동하지 않습니다 . 서버 이름은 같은 내장 변수를 포함 할 수 있습니다 $hostname. 그 행동을 명확히하기 위해 답변을 업데이트했습니다.
Xavier Lucas

5
글쎄, $hostname유일하게 허용되는 변수입니다. github.com/nginx/nginx/blob/… 사실, 그것은 실제 변수가 아니라 마술 상수와 비슷합니다
Alexey Ten


3
이것은 어쩌면이다 사상 최고의 연구 SF 대답. 여러분 모두에게 감사 / 참조 @AlexeyTen
카이저
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.