nginx : 여러 서버 지시문과 함께 업스트림? {

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 위치를 ‘보지’않습니다.


답변