Nginx 역방향 프록시 설정

Nginx 역방향 프록시 설정

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

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

저는 이것이 이 문제를 해결하는 가장 좋은 방법인지 아니면 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(). 이는 소켓 설정에 비해 무시할 수 있는 수준입니다.

웹사이트는매칭 시작 전 정규화=따라서 연산자( , ~, *~, ) 중 하나를 사용하지 않는 한 ^~일치에 대해 정말 영리한 것은 없습니다 .

~정규식 일치( , ) 를 사용한 *~다음 몇 가지 if논리를 사용하여 서버 간을 결정할 수 upstream있지만이것은 느린 해결책이 될 것입니다.

반면에 정규식 위치가 하나 이상 있는 경우 ^~연산자 사용을 고려해야 합니다. 보다SO에 대한 Martin Redmond의 오래되었지만 여전히 관련 있는 답변다양한 연산자와 nginx이를 일치시키는 방법에 대해 설명합니다.

관련 정보