Một số cấu hình proxy ngược nginx ngừng hoạt động mỗi ngày một lần


12

Tôi có một proxy ngược nginx ủy nhiệm các yêu cầu từ ELB bên ngoài đến ELB bên trong.

Tôi có 6 trường hợp phụ trợ xử lý các yêu cầu. Các cấu hình kích hoạt trang web trông như thế này, nhưng có số cổng và proxy_pass khác nhau. Mọi thứ khác đều giống hệt nhau:

server {
    listen 3000;
    location / {
            proxy_pass http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000;
            include /etc/nginx/proxy.conf;
    }

}

Cứ sau khoảng 24 giờ, một trong các cấu hình sẽ ngừng hoạt động. Tất cả các proxy khác hoạt động tốt. Nếu tôi khởi động lại nginx, tất cả các cấu hình hoạt động trở lại. Không có gì trong error.log, không có gì lạ trong nhật ký truy cập, syslog hoặc dmesg.

Đây có phải là một cái gì đó được biết đến? Tôi đã làm gì đó sai với cấu hình proxy của tôi? Có bất kỳ bản ghi khác tôi có thể nhìn vào?



Câu trả lời:


22

Câu trả lời cho câu hỏi này là ELB đôi khi thay đổi địa chỉ ip và nginx không giải quyết tên trong khi bắt đầu.

Để khắc phục điều này, luôn có một máy chủ DNS trong VPC của bạn ở mức 0,2. Vì vậy, nếu CIDR ip cục bộ là 10.0.0.0/16 thì máy chủ DNS ở 10.0.0.2.

Thêm phần này vào cấu hình nginx.

resolver 10.0.0.2 valid=10s;

Proxy_pass cũng cần được xác định là một biến nếu không nginx sẽ chỉ giải quyết nó một lần. Vì vậy, dựa trên cấu hình ở trên, đây là cấu hình chính xác:

server {
    listen 3000;
    location / {
            resolver 10.0.0.2 valid=10s;
            set $backend "http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000"
            proxy_pass $backend;
            include /etc/nginx/proxy.conf;
    }
}

có ai biết phiên bản nginx nào hỗ trợ các biến trong cài đặt proxy_pass không? Tôi đang thử dùng beanstalk đàn hồi (nginx phiên bản 1.6.2) và dù sao tôi cũng không muốn chấp nhận biến này.
Stephen C

Cảm ơn bạn vì điều này, đã khiến chúng tôi phát điên trong khoảng một tháng nay!
Jim.R

Bài viết này về khối nginx lặp lại lặp lại cấu hình này. nginx.com/blog/dns-service-discovery-nginx-plus
Morgan Christiansson

1

Nếu proxy_pass của bạn không chuyển trực tiếp đến một URL như ví dụ của bạn hiển thị ( http://amazonaws.com ), mà thay vào đó là trang trại ngược dòng proxy, như thế này:

upstream my_upstream {
 server1 127.0.0.1:1337;
 server2 127.0.0.1:1338; 
}
location / {
 proxy_pass         http://my_upstream;
}

Sau đó, bạn sẽ ít quan tâm đến một trong những thượng nguồn tạm thời thất bại. Bởi vì tất cả họ sẽ làm cùng một công việc. Nếu một người không trả lời, thì người tiếp theo sẽ được ủy quyền cho câu trả lời đó. Yên tâm.

Nginx sẽ bỏ qua một máy bị lỗi trong x giây tự động. Cho đến khi bạn sửa chữa nó, hoặc cho đến khi nó trở lại một mình. ( http://wiki.nginx.org/HttpUpstreamModule )

Vì vậy, bất kể lý do cho sự gián đoạn của bạn có thể là gì, bằng cách phân phối chúng tại một trang trại thượng nguồn, điều này chuyển đổi thành một thiết lập dễ dàng hơn.


Cảm ơn vì đã trả lời! Điều kỳ lạ là tôi có thể thực hiện một yêu cầu đến phiên bản phụ trợ trực tiếp nhưng không thông qua nginx. Nếu tôi chỉ khởi động lại nginx, yêu cầu lại được ủy quyền. Vì điều này đã có trong môi trường sản xuất, tôi thực sự muốn tìm hiểu lý do tại sao một trong các cấu hình dường như bị "dỡ" hoặc làm thế nào tôi có thể tìm ra nginx thực sự làm gì đằng sau hậu trường.
202172

Bạn có thể muốn săn thêm thông tin đăng nhập nginx sau đó. Đây là một vấn đề mà ai đó đã cố gắng, như bạn, để tìm hiểu thêm về "các vấn đề không liên tục [...] Tôi đang ủy quyền" stackoverflow.com/questions/9914792/. Ông mô tả cách lấy các bản ghi có liên quan hơn. Hy vọng nó giúp.
user18099 11/12/13
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.