Tôi muốn ủy quyền yêu cầu đến một máy chủ khác bằng proxy_pass trong khi xóa tiền tố đường dẫn phù hợp. Tôi tin rằng một cách để làm điều này là như sau;NGINX proxy_pass xóa tiền tố đường dẫn & giải quyết DNS
location /a/ {
proxy_pass https://website.com/
}
Ví dụ: yêu cầu đến http://localhost/a/b.html
sẽ được ủy quyền tới https://website.com/b.html
.
Theo tôi biết vấn đề với điều này trong các phiên bản phi thương mại trên NGINX là bản ghi DNS A cho website.com
sẽ được tải và được lưu trữ vĩnh viễn khi khởi động. Tôi đã nhìn thấy một kỹ thuật để giải quyết vấn đề này bằng cách sử dụng một biến như $request_uri
trong chỉ thị proxy_pass, do đó buộc NGINX phải phân giải lại DNS theo TTL của bản ghi.
Ví dụ:
location /a/ {
rewrite ^/a/(.*) /$1 break;
proxy_pass https://website.com/$request_uri
}
Thật không may, có vẻ như ở trên không hoạt động vì dường như vẫn truyền/a/tiền tố lên thượng nguồn.
Về cơ bản tất cả những gì tôi muốn đạt được ở đây là ủy quyền một yêu cầu trong khi xóa tiền tố đường dẫn sao cho các bản ghi DNS không được lưu vào bộ nhớ cache mãi mãi.
Cảm ơn.
Cảm ơn bạn đã trả lời, tôi sẽ kiểm tra ngày hôm nay và nếu nó hoạt động tốt, tôi sẽ đánh dấu câu trả lời này được chấp nhận. Tôi đã tìm thấy lời khuyên trước đây về giải pháp [ở đây] (http://gc-taylor.com/blog/2011/11/10/nginx-aws-elb-name-resolution-resolvers). Tôi khá tự tin rằng điều này đã có hiệu quả "dự định" như xa như giải quyết DNS đi, bởi vì trước đây mà không có điều này thượng nguồn sẽ không còn có sẵn mỗi vài ngày hoặc lâu hơn và tôi sẽ cần phải khởi động lại. Tôi đã có nó chạy như thế này trong hơn 3 tháng nay không có khởi động lại và tôi đã không gặp phải bất kỳ vấn đề DNS kể từ khi thực hiện thay đổi đó. –
Ồ, vâng, nếu nginx giữ một bộ nhớ cache trong 5 phút của tất cả các tên máy chủ nó giải quyết trong sự hiện diện của bất kỳ biến nào trong proxy_pass, điều đó sẽ có ý nghĩa; nó thậm chí còn được ghi lại theo cách đó, nhưng nó không rõ ràng lắm! học mỗi ngày! :-) vì vậy, tôi đoán ở trên sẽ hoạt động và bạn thậm chí nên xóa '/' sau '.com', ví dụ: phải là'.com $ uri' – cnst
Vì vậy, các thử nghiệm sơ bộ dường như hoạt động tốt với đề xuất ban đầu của bạn 'viết lại ^/a /(.*)/$ 1 ngắt; proxy_pass https://website.com/$uri$is_args$args;) 'nhưng không ok với chỉ' .com $ uri' (các tham số truy vấn không được truyền đến thượng nguồn. Tôi sẽ gắn bó với đề xuất đầu tiên. cho các câu trả lời! –