2016-08-23 13 views
9

Tôi biết rằng nginx có thể được cấu hình để hoạt động như một bộ cân bằng tải, nhưng tôi tự hỏi liệu có thể cân bằng tải giữa các proxy không? Hãy nói rằng tôi có nhiều proxy chạy trên localhost, và tôi muốn sử dụng nginx để cung cấp một điểm kết nối duy nhất để tôi có thể xoay giữa các proxy. Tôi đang cố gắng để đạt được một cái gì đó tương tự như bài here, được sử dụng HAProxy thay vì nginx. Tôi có sau nginx.conf:Làm thế nào để cấu hình nginx hoạt động như một bộ cân bằng tải cho proxy?

events { } 

http { 
    upstream proxies { 
     server localhost:9998; 
     server localhost:9999; 
     server localhost:10000; 
    } 
    server { 
     listen 8080; 

     location/{ 
      proxy_pass http://proxies; 
     } 
    } 
} 

Tuy nhiên, khi tôi gửi một yêu cầu curl như thế này:

curl http://icanhazip.com -x localhost:8080 

Nó bỏ qua các url, và tôi nhận được một phản ứng tương tự như những gì tôi mong đợi nếu tôi có đã gửi yêu cầu trực tiếp tới một trong các máy chủ proxy như vậy:

curl localhost:9999 

Tất nhiên, tôi không thực sự mong đợi nó hoạt động, vì phải có một số tùy chọn để nói với nginx để điều trị máy chủ tream là proxy. Tuy nhiên, tôi không thể tìm thấy cách thực hiện việc này sau khi tìm kiếm trực tuyến.

+0

Tôi không chắc chắn về vấn đề của bạn, vấn đề của bạn là gì, và bạn đang gọi một proxy - như ở đây bạn cân bằng tải nginx cũng là một proxy ngược -? Là vấn đề của bạn thực tế bạn không có tiêu đề máy chủ? Thử thêm máy chủ lưu trữ 'proxy_set_header Host $;' sau lệnh proxy_pass. – regilero

+0

Tôi đang cố gắng sử dụng nginx để xoay giữa nhiều proxy mà tôi đã thiết lập. Nói cách khác, tôi muốn có thể kết nối với máy chủ nginx và cổng (ví dụ: localhost: 8080) làm proxy, và nó sẽ xoay giữa các proxy mà tôi đã thiết lập –

+0

Ok, và bạn đã thử điều chủ nhà? Bởi vì một proxy ngược lại gần như trong suốt, bạn không quan tâm nếu backend được ủy quyền là các máy chủ cuối cùng hoặc cũng có một số proxy, nhưng bạn cần biết miền nào bạn đang chuyển tiếp tới proxy. – regilero

Trả lời

1

như bạn có thể nhìn thấy trong haproxy AKT bài haproxy của bạn như là một proxy mong

tùy chọn http_proxy

gì tùy chọn này có nghĩa là được mô tả trong cuốn hướng dẫn https://cbonte.github.io/haproxy-dconv/1.6/configuration.html#4-option%20http_proxy

Đôi khi điều đó xảy ra rằng mọi người cần một proxy HTTP thuần túy mà hiểu các yêu cầu proxy cơ bản không có bộ nhớ đệm cũng như bất kỳ tính năng ưa thích nào của tính năng . Trong trường hợp này, có thể đáng để thiết lập một cá thể HAProxy với tập hợp "tùy chọn http_proxy". Ở chế độ này, không có máy chủ nào được khai báo, và kết nối được chuyển tiếp đến địa chỉ IP và cổng được tìm thấy trong URL sau lược đồ "http: //".

Không có độ phân giải địa chỉ máy chủ nào được thực hiện, vì vậy điều này chỉ hoạt động khi địa chỉ IP tinh khiết được chuyển. Vì chu vi sử dụng của tùy chọn này là khá hạn chế, nó có thể chỉ được sử dụng bởi các chuyên gia biết rằng họ cần chính xác nó. Điều này không tương thích với chế độ đường hầm HTTP.

Theo như tôi biết nginx không có tính năng này.

Câu hỏi tương tự về điều này. https://superuser.com/questions/604352/nginx-as-forward-proxy-for-https

Tại sao bạn không thể sử dụng haproxy như được mô tả trong bài đăng của liên kết của bạn?

+0

HaProxy không cho phép bạn bao gồm một tệp trong cấu hình. Tôi muốn quản lý tệp proxies.list được nhập. Nginx có bao gồm, nhưng dường như bạn không thể chuyển tiếp các yêu cầu tới một proxy http? – chovy

0

Bạn sẽ cần phải cấu hình cân bằng tải quy tắc cho proxy hoặc trọng hoặc khác

một cái gì đó như max_fails = 1 fail_timeout = 10s;

 Can you put max_fails =1 and fail_timeout=10s; after the proxies 

    server localhost:9998 max_fails =1 and fail_timeout=10s; 
    server localhost:9999 max_fails =1 and fail_timeout=10s; 
    server localhost:10000 max_fails =1 and fail_timeout=10s; 


    change location /{ 
     to location @proxy{ 
+0

bạn có thể cung cấp ví dụ đầy đủ ở đây không? – chovy

Các vấn đề liên quan