Nginx : 수천 개의 server_name


12

수천 개의 외부 구성 파일을 만들거나 매우 긴 server_name 줄을 쓰지 않고 어떻게 Nginx를 수천 개의 다른 server_name으로 제한하도록 구성 할 수 있습니까?

실제로 Nginx가 server1.com, server2.com 등에 대해서만 리버스 프록시가되기를 바랍니다.

가장 좋은 해결책은 server1.com, server2.com 등 제한된 server_names를 포함하는 단일 외부 구성 파일을 갖는 것입니다.

가능합니까?


좋아, 답변 주셔서 감사합니다, 그것은 reg없이 작동합니다. 표현. kolbijack이 설명한대로 큰 server_name 목록입니다. 고마워.


도움이 된 답변이라면 kolbijack 답변을 수락해야합니다.
Oneiroi

답변:


19

server_name 지시문을 파일에 모두 넣은 다음 서버 블록에서 포함시킬 수 있습니다.

# example.com.conf
server {
  include /path/to/server_names;
  ...
}

# /path/to/server_names
server_name
  example.com
  domain.com
  foo.com
;

server_names 파일은 상단에 server_name 만 있으면됩니다. 유효한 지시어가 될 수 있도록


이렇게하면 대기 시간 / 조회 지연 / RAM 사용에주의하십시오. Apache에서 큰 목록 (약 5,000 ServerAlias지시문 및 최대 1600 만 Deny from지시문)으로 테스트를 수행했습니다 . 5,000 개의 도메인은 측정 가능하지만 약간의 지연을 생성합니다. 수를 늘리면 약 50,000에서 지연이 눈에 띄기 시작했습니다. Apache (및 아마도 nginx와 함께)를 사용하면 목록이 RAM에 저장됩니다. 이는 가장 큰 세트로 사용 가능한 RAM 내에서 하나의 자식 프로세스 만 시작할 수 있음을 의미합니다 .
Ladadadada

1
@Ladadadada LOL. 방금 확인했습니다. Nginx는 server_name지시문 에서 100 000 개의 도메인에 Request rate: 36900.6 req/s (0.0 ms/req)
30Mb

1
1000000에 60MbRequest rate: 34716.8 req/s (0.0 ms/req)
VBart

최소한 prefork MPM을 사용하면 Apache가 관리하는 것보다 훨씬 낫습니다. 편리합니다.
Ladadadada

7

블록 의 server_name선언은 server {}정규 표현식 일 수 있으며,이를 통해 설정된 패턴 내에서 server_name을 일치시킬 수 있습니다.

이에 대한 자세한 내용은 여기를 참조 하십시오 : http://nginx.org/en/docs/http/server_names.html#regex_names


고맙지 만 사용자 지정 도메인 목록을 단일 정규식으로 선언 할 수 없습니다. server_name [zeus.domain.com | poseidon.domain.com | etc ...]; 너무 길어요
Fred

1
@fred 예제 데이터 세트를 줄 수 있습니까? 한 도메인이 다른 도메인과 전혀 다르지 않으면 Regex 패턴으로 문제를 해결할 것이라고 확신합니다.
Oneiroi

@Oneiroi : 사용 사례 = 사용자 생성 하위 도메인. 각 사용자가 자신의 하위 도메인을 가져오고 Nginx를 사용하여 다른 서버로 라우팅하려는 SaaS (Software-as-a-Service) 제품을 상상해보십시오. 이 경우 어떤 도메인도 다른 도메인과 같지 않습니다.
m.stenta

@ m.stenta 아, 페어 포인트. 하위 도메인에 공통점이 없다면 정규식이 작동하지 않습니다. 또는 도메인 자체에서 파생 된 정규 표현식을 작성하여 목적을 무효화해야합니다.
Oneiroi 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.