2013-03-12 39 views
18

chúng tôi có hai máy chủ, A và B. Máy chủ A được truy cập trên toàn thế giới. Anh ta đã cài đặt nginx. Đó là những gì tôi có trong conf:Đường dẫn proxy chính xác trong nginx.conf

location /test { 
    proxy_pass http://localserver.com; 
} 

gì nó nên làm, là dịch addreess http://globalserver.com/test (có nghĩa là máy chủ A) đến địa chỉ máy chủ nội bộ http://localserver.com. Tuy nhiên, nó phụ thêm đường dẫn vị trí, có nghĩa là nó sẽ tìm kiếm http://localserver.com/test, không có sẵn. Làm thế nào tôi có thể làm cho các proxy vượt qua đến địa chỉ chính xác, ném ra phần cuối cùng trong vị trí?

Trả lời

30

Điều đó sẽ hiệu quả. Nginx nên tách đường dẫn '/ test' trên máy chủ cục bộ ngược dòng. Vì vậy, những gì tôi có thể nói là đó không phải là nguyên nhân. Để làm cho nó tốt hơn một chút, hãy thử này:

location /test/ { 
    proxy_pass http://localserver.com/; 
} 

2 chém tôi đã thêm vào 2 dòng đầu tiên sẽ tránh được trận đấu nhầm '/ testABC' và gửi yêu cầu sai đến máy chủ địa phương ở thượng nguồn, ví dụ.

Bạn có một dòng

proxy_redirect 

trong khối cùng một vị trí? Nếu máy chủ cục bộ ngược dòng của bạn có chuyển hướng, thì lỗi trên dòng đó sẽ gây ra sự cố như bạn đã mô tả.

[CẬP NHẬT] Tìm nguyên nhân gốc tại sao cấu hình gốc không hoạt động và công việc của tôi: nginx KHÔNG thay thế phần đường dẫn URI nếu chỉ thị proxy_pass không có đường dẫn URI. Vì vậy, sửa chữa của tôi thêm một dấu gạch chéo (dấu gạch chéo được coi là một đường dẫn URI) ở cuối kích hoạt thay thế đường dẫn URI.

tham khảo: http://wiki.nginx.org/HttpProxyModule#proxy_pass

Nếu nó là cần thiết để truyền URI theo hình thức chưa qua chế biến sau đó chỉ thị proxy_pass nên được sử dụng mà không cần URI phần

location /some/path/ { 
    proxy_pass http://127.0.0.1; 
} 
+0

Vâng giải pháp ở đây là nếu tôi thêm ít dấu gạch chéo ngược (đường dẫn gốc) ở cuối URI của tôi 'proxy_pass http: // 127.0.0.1 /' nginx sẽ không thêm đường dẫn đến vào cuối? –

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