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


15

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입니다.

조언을 주셔서 감사합니다!


좀 더 정확하게 말하자면, 2 개의 파일 접근 방식을 사용할 때는 404로 응답하는 것이 기본 사이트입니다.
oDDsKooL

답변:


8

그렇게 혼란스럽고 테스트 한 후에, 나는 그것이 작동하게하고 응용 프로그램 당 하나의 구성 파일을 제공 할 수있는 방법을 찾았습니다.

다음은 애플리케이션 당 하나의 공통 파일과 한 쌍의 업스트림 / 위치 파일로 발송됩니다.

  • /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;
    }
    

1
오타입니까? 업스트림에는 " localhost : 8990 ;" 대신 "server localhost : 8990"이 있어야합니다 . 여기를 참조하십시오 : nginx.org/en/docs/http/ngx_http_upstream_module.html
mbdev

링크 된 문서에서 블록 내부의 모든 명령이 세미 열로 끝나는 것으로 보입니다. 예 upstream backend { server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; }. 또한 이것은 다음과 함께 작동합니다 ;:)
oDDsKooL

주소 앞에 '서버'라는 키워드가 없습니다. 세미콜론 부분은 무시하십시오.
mbdev

1

http 블록은 많은 서버 하위를 가질 수 있습니다. 그러나 nginx는 하나의 서버 블록을 선택하여 요청을 처리합니다. 따라서 요청은 첫 번째 서버 블록과 일치하므로 백엔드 2 위치를 '보지'않습니다.


당신은 아마 내 location지시가 backend2에 대한 요청을 빨아 들이고 붙잡는 것을 의미 합니까?
oDDsKooL

아니면 servernginx가 server요청을 전달 하기에 적절한 것을 찾을 때 두 블록 을 구별하는 방법이 필요 합니까?
oDDsKooL

두 위치 블록은 동일한 서버 블록 내에 있어야합니다.
chrskly
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.