nginx là proxy sử dụng một ip nguồn cụ thể


10

Tôi đang sử dụng nginx để phục vụ tệp tĩnh và proxy các yêu cầu khác cho một số trường hợp Tomcat. Vấn đề là tôi không biết cách chọn địa chỉ IP nào nginx sẽ sử dụng để kết nối với Tomcat.

Mỗi phiên bản Tomcat chỉ chấp nhận kết nối HTTP từ các địa chỉ IP cụ thể. Máy chủ của tôi có tất cả các IP này. Tôi không thể chọn cái nào sẽ nginx sử dụng.

Đây là tập tin cấu hình của tôi:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

location /integracao/ {
    proxy_pass http://X.X.X.X:9080/integracao/;
}

location /solr/ {
    proxy_pass http://Y.Y.Y.Y:8080/solr/;
}

Máy chủ của tôi có một giao diện với hai địa chỉ IP: A và B. Tôi cần sử dụng IP A để kết nối với Tomcat và IP B đầu tiên để kết nối với Solr.

Có ai biết làm thế nào để làm điều đó?

Câu trả lời:


11

lệnh proxy_bind cho phép bạn chọn địa chỉ IP nguồn khác nhau.

http://wiki.nginx.org/HttpProxyModule#proxy_bind

Vì vậy, cấu hình của bạn sẽ trông như sau:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

location /integracao/ {
    proxy_bind A.A.A.A;
    proxy_pass http://X.X.X.X:9080/integracao/;
}

location /solr/ {
    proxy_bind B.B.B.B;
    proxy_pass http://Y.Y.Y.Y:8080/solr/;
}

Lệnh này không có sẵn tại thời điểm câu hỏi của tôi. Nó có sẵn kể từ phiên bản 0.8.22. Cảm ơn sự giúp đỡ của bạn :)
msbrogli

1

Nếu nginx không thể làm điều đó, bạn luôn có thể sử dụng netfilter và SNAT để làm cho nó xuất hiện giống như nginx đang sử dụng ip cụ thể:

iptables -t nat -A POSTROUTING -p tcp --dport 9080 -d ip_of_your_backend -j SNAT --to one_of_ips_bound_to_nginx_server

0

Tìm kiếm thông qua wiki nginx và đặc biệt là phần về ProxyModule , tôi không tìm thấy bất cứ điều gì liên quan.

Nếu bạn có khả năng thử nghiệm một chút, tôi khuyên bạn nên thử các giá trị khác nhau trong listenchỉ thị và kiểm tra nhật ký truy cập tại máy chủ phụ trợ của bạn để xem nginx địa chỉ IP đến từ đâu.

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.