2011-11-29 32 views
26

Có thể /etc/hosts được sử dụng thay vì giải quyết khi sử dụng proxy_pass?Khi sử dụng proxy_pass, máy chủ/etc/có thể được sử dụng để phân giải tên miền thay vì "giải quyết"?

Tôi cần thực hiện proxy_pass cho cùng một máy nginx. Có cách nào để giải quyết các tên miền bằng cách sử dụng tệp/etc/hosts của máy thay vì chỉ định máy chủ DNS thông qua thuộc tính "resolver" không?

Điều này sẽ giúp tôi tiết kiệm thêm các bước nhảy cần thiết để tiếp cận cùng một máy chủ. Tôi đã cố gắng thiết lập IP nội bộ ánh xạ tới DNS trong tệp/etc/hosts nhưng nginx vẫn đọc từ máy chủ DNS được đặt trong thuộc tính resolver. Hoặc có cách nào để làm cho mô-đun HTTPProxy xem xét cài đặt tệp/etc/hosts không?

Cảm ơn lời khuyên bạn có thể chia sẻ ..

Đây là cùng một câu hỏi tôi đã đăng trong diễn đàn nginx: http://forum.nginx.org/read.php?11,218997

+0

Điều lạ lùng, điều này đang hoạt động nếu bạn sử dụng ngược dòng (độ phân giải máy chủ) –

Trả lời

39

Bạn có thể làm được việc này bằng cách cài đặt và thiết lập dnsmasq phân giải của bạn để 127.0.0.1. Về cơ bản, điều này sử dụng DNS cục bộ của bạn làm trình phân giải, nhưng nó chỉ giải quyết những gì nó biết (trong số đó là /etc/hosts) và chuyển phần còn lại vào DNS mặc định của bạn.

+0

Tôi tự hỏi tại sao điều này không được đánh dấu là câu trả lời đúng –

+5

Nhưng thật đáng buồn 'dnsmasq' không tự động phát hiện các thay đổi trong tệp' hosts'. Bạn phải gửi 'HUP'. – Mitar

3

Cách giải quyết là sử dụng bản đồ Nginx, để sao chép nội dung /etc/hosts.

map $wanted_host $wanted_host_ip 
{ 
    default 127.0.0.1; 
    b.dev.local X.X.X.X; 
    a.dev.local X.X.X.X; 
} 

server 
{ 
    listen    80; 
    server_name   ~^(?P<wanted_port>[0-9]+?)-(?P<wanted_host>.+?)\.HOSTNAME$; 

    location/
    { 
     proxy_pass http://$wanted_host_ip:$wanted_port; 

    } 
} 

Điều này sẽ lập bản đồ wanted_host đến wanted_host_ip, như người giải quyết.

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