2013-03-03 4 views
-1

nginx server_name에 사용 된 정규식을 설명하는 데 도움이 될 수 있습니까? 지침은 다음과 같습니다.nginx server_name 지시어에 사용되는 정규 표현식

server_name (?<account>.+)\.mydomain\.com$ 

처음에는 ?의 요점을 알지 못합니다. 또한 이것을 확장하여 *.mydomain.com (web3.mydomain.com 제외)으로 확장 할 수 있습니다. I.E.

this.mydomain.com 

이 일치해야하지만 :

web3.mydomain.com 

이 일치하지 않아야합니다.

감사합니다.

+0

나는 그것이 명명 된 캡처 그룹이라고 생각하고 있습니다. – nhahtdh

+0

이 맞으므로'$ account'는 하위 도메인을 포함합니다. – Justin

답변

2

?<account>은 단지 naming the capture group입니다. 따라서 내부적으로 ngix는 "capture group # 1"대신 "account"라는 이름으로 .+을 참조 할 것입니다.

또한

, 내가 확장 할 수있는 방법이 일치하는 * .mydomain.com을 web3.mydomain.com

당신은 negated lookahead assertion 사용할 수 있습니다 제외 :

server_name (?!web3\.)(?<account>.+)\.mydomain\.com$ 

(?!web3\.) 부분을 검사하는 경우를 문자열이 web3.으로 시작하면 전체 표현식이 일치하지 않습니다.

그러나 미리보기는 그다지 효율적이지 않습니다. 어쩌면 ngix를 구성하여 web3.mydomain.com과 일치하는 것을 먼저 찾고이 값이 일치하지 않는 경우보다 일반적인 표현식을 사용해보십시오.

+0

이 정규식 검사기에 따르면 http://rubular.com'(?! web3 \.) (? . +) \. mydomain \ .com $'은 제안대로 작동하지 않습니다. 'web3.mydomain.com'을보십시오. match group은'eb3'입니다. – Justin

+0

@Justin : 이것은 매칭에 사용 된 방법에 달려 있습니다. 문자열이 전체 일치를 검사하는 경우 표현식이 작동하지만 끝에있는'$ '는 필요하지 않습니다. 그러나 문자열이 어디에서든지 일치하는 식으로 * 검색 *되면 다음 식에''^''을 추가해야합니다. 'server_name^(?! web3 \.) (? . +) \ .mydomain \ .com $' – Oberon

+0

감사합니다. 올바른 정규 표현식입니다.하지만 이상한 이유로 nginx가 당황합니다. 'nginx : [emerg] unknown'account 'variable'. nginx 포럼에 게시하려고합니다. – Justin