nginx: ngược dòng với nhiều chỉ thị máy chủ?


14

Tôi đang cố gắng đóng gói 2 ứng dụng sử dụng nginx làm proxy và phân phối từng tệp cấu hình vào /etc/nginx/conf.d/.

Làm điều này trong một tệp ( combined.conf) hoạt động tuyệt vời:

    upstream backend1 {
      http://localhost:8989;
    }

    upstream backend2 {
      http://localhost:8990;
    }

    server {
      location /backend1/ {
        proxy_pass  http://backend1;
      }
      location /backend2/ {
        proxy_pass  http://backend2;
      }

Tuy nhiên, khi chia thành 2 tệp, một trong các chuyển hướng không thành công một cách có hệ thống:

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

Vì vậy, câu hỏi của tôi là: một httpnút có thể có 2 con khác nhau server?

Tài liệu Nginx không nói gì về nó.

Những người khác dường như đã thành công với loại kiến ​​trúc này :(

Phiên bản Nginx là 1.1.19-1ubfox0.1.

Cảm ơn vì lời khuyên!


Nói chính xác hơn, khi tôi sử dụng cách tiếp cận 2 tệp, đó là trang mặc định trả lời bằng 404.
oDDsKooL

Câu trả lời:


8

Sau khi ầm ầm & thử nghiệm, tôi đã tìm ra cách để làm cho nó hoạt động và có thể gửi một tệp cấu hình cho mỗi ứng dụng.

Đây là, được gửi trong một tệp chung và một cặp tệp ngược dòng / vị trí cho mỗi ứng dụng:

  • /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
Đây có phải là một lỗi đánh máy? ngược dòng nên có "máy chủ localhost: 8990" thay vì " localhost: 8990 ;". Xem tại đây: nginx.org/en/docs/http/ngx_http_upstream_module.html
mbdev

Dường như từ tài liệu bạn đã liên kết, mọi lệnh trong một khối được kết thúc bằng một cột bán. Ví dụ upstream backend { server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; }. Ngoài ra, điều này hoạt động với ;:)
oDDsKooL

Tôi có nghĩa là từ khóa 'máy chủ' bị thiếu trước địa chỉ. Bỏ qua phần dấu chấm phẩy.
mbdev

1

Một khối http có thể có nhiều máy chủ con. Tuy nhiên, nginx chọn một khối máy chủ để xử lý yêu cầu. Vì vậy, yêu cầu không bao giờ 'nhìn thấy' vị trí backend2 vì nó khớp với khối máy chủ đầu tiên.


Ý bạn là có lẽ đó là locationchỉ thị của tôi hút và lấy yêu cầu dành cho backend2?
oDDsKooL

Hoặc là tôi cần một cách để phân biệt cả hai serverkhối khi nginx tìm kiếm sự phù hợp serverđể chuyển tiếp yêu cầu?
oDDsKooL

Cả hai khối vị trí phải nằm trong cùng một khối máy chủ.
chrskly
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.