nginx를 프록시로 사용하는 두 개의 응용 프로그램을 패키지화하고 각 구성 파일을에 전달하려고합니다 /etc/nginx/conf.d/
.
하나의 파일 ( combined.conf
) 에서 이것을하면 훌륭하게 작동합니다.
upstream backend1 {
http://localhost:8989;
}
upstream backend2 {
http://localhost:8990;
}
server {
location /backend1/ {
proxy_pass http://backend1;
}
location /backend2/ {
proxy_pass http://backend2;
}
그러나 2 개의 파일로 분할하면 리디렉션 중 하나가 체계적으로 실패합니다.
-
backend1.conf
:upstream backend1 { http://localhost:8989; } server { location /backend1/ { proxy_pass http://backend1; }
-
backend2.conf
:upstream backend2 { http://localhost:8990; } server { location /backend2/ { proxy_pass http://backend2; }
그래서 내 질문은 : http
노드는 두 개의 다른 자식을 가질 수 server
있습니까?
Nginx 문서 는 그것에 대해 아무 말도하지 않습니다.
다른 사람들은 이런 종류의 아키텍처로 성공한 것 같습니다 🙁
Nginx 버전은 1.1.19-1ubuntu0.1입니다.
조언을 주셔서 감사합니다!
답변
그렇게 혼란스럽고 테스트 한 후에, 나는 그것이 작동하게하고 응용 프로그램 당 하나의 구성 파일을 제공 할 수있는 방법을 찾았습니다.
다음은 애플리케이션 당 하나의 공통 파일과 한 쌍의 업스트림 / 위치 파일로 발송됩니다.
-
/etc/nginx/conf.d/common-proxies.conf
:include /upstreams/*.conf; server { include /locations/*.conf }
-
/etc/nginx/locations/backend1.conf
location /backend1/ { upstream http://backend1; }
-
/etc/nginx/locations/backend2.conf
location /backend2/ { upstream http://backend2; }
-
/etc/nginx/upstreams/backend1.conf
upstream backend1 { http://localhost:8989; }
-
/etc/nginx/upstreams/backend2.conf
upstream backend2 { http://localhost:8990; }
답변
http 블록은 많은 서버 하위를 가질 수 있습니다. 그러나 nginx는 하나의 서버 블록을 선택하여 요청을 처리합니다. 따라서 요청은 첫 번째 서버 블록과 일치하므로 백엔드 2 위치를 ‘보지’않습니다.