Nginx 역방향 프록시 설정

Nginx 역방향 프록시 설정

현재 저는 약 20개의 서버에 수백 개의 웹 애플리케이션을 분산시키고 있으며, 역방향 프록시는 실행 중인 Pound 및 Haproxy 앞에 놓여 있습니다. Pound는 http에서 https로의 리디렉션과 SSL 암호화를 수행한 다음 Tomcat을 실행하는 백엔드 서버 중 하나로 전달하기 위해 각 사이트에 설정된 규칙이 있는 Haproxy로 전달합니다. 모든 사이트는 동일한 도메인에 있습니다(예: www.domain.com/webapp1, www.domain.com/webapp2).

Pound와 Haproxy는 원래 호스팅 제공업체에 의해 설정되었으며 Pound에 대한 불만이 커져 이제는 이 설정을 Nginx로 대체하려고 합니다. 현재 https 리디렉션 및 SSL을 수행하는 개발 환경에서 Nginx를 실행하고 있으며 백엔드로 프록시 설정하기 위한 몇 가지 규칙이 설정되어 있습니다.

나는 이것이 이 문제를 해결하는 가장 좋은 방법인지, 아니면 Haproxy가 모든 규칙을 처리하도록 두고 Nginx를 Pound의 대체품으로 구성하는 것이 더 나은지에 대한 몇 가지 조언을 듣고 있습니다.

내 걱정은 아래와 같은 수백 가지 전달 규칙으로 Nginx를 구성하고 결국 성능 문제가 발생할 것이라는 것입니다. 어떤 제안이라도 환영합니다. 감사합니다.

location /webapp1/ {
     proxy_pass http://10.1.9.11:8080;
}

location /webapp2/ {
     proxy_pass http://10.1.9.11:8080;
}

location /webapp3/ {
     proxy_pass http://10.1.9.12:8080;
}

답변1

저는 잘 모르지만 성능 문제에 대한 여러분의 걱정에 답할 수 haproxy있을 만큼 충분히 알고 있습니다 .nginx

구성 은 친숙한 형식 nginx으로 컴파일되어 struct메모리에 보관되며 각 요청에서 파일을 읽지 않습니다. 따라서 수백 개의 구성이 거의 호출 + 동일한 횟수 location /...만큼 빠르게 실행됩니다 . 소켓 설정에 비해 무시할 수 있습니다.strlen()strncmp()

URL은 다음과 같습니다.매칭이 시작되기 전에 정규화됨=따라서 연산자( , ~, *~, ) 중 하나를 사용하지 않는 한 일치 항목에 대해 실제로 영리한 것은 없습니다 ^~.

정규식 일치( ~, *~)를 사용한 다음 일부 논리를 사용하여 서버 if간을 결정할 수 있지만upstream그건 느린 해결책이겠지.

반면에 정규식 위치가 하나 이상 있는 경우 연산자 사용을 고려해야 합니다 ^~. 참조SO에 대한 Martin Redmond의 오래되었지만 여전히 관련 있는 답변다양한 연산자와 nginx그것들이 어떻게 일치하는지에 대해 알아보세요.

관련 정보