List_addresses thực sự có thể được thiết lập thành một danh sách?


32

Tôi có một máy ảo có địa chỉ IP 192.168.0.192 đang chạy postgreSQL.

Nếu tôi chỉ định

listen_addresses = '*'

sau đó tôi có thể kết nối từ một VM khác tại 192.168.0.191 và từ localhost.

Nhưng tôi dường như không thể sử dụng một danh sách để nói với postgreSQL sử dụng hai địa chỉ đó. Nếu tôi thay đổi list_addresses thành một danh sách:

listen_addresses = '192.168.0.191, localhost'

sau đó tôi không còn có thể kết nối từ 192.168.0.191.

Tôi nhận thấy rằng hầu hết tất cả các ví dụ trên stackexchange đặt list_addresses thành '*'. Đây có phải là vì hình thức danh sách không hoạt động?

Câu trả lời:


45

Có, listen_addressescó thể được đặt thành một danh sách các địa chỉ trên máy chủ lưu trữ cục bộ để liên kết để nghe.

Trong ví dụ của bạn:

lắng nghe_addresses = '192.168.0.191, localhost'

Nếu máy cục bộ có IP 192.168.0.192, bạn nên chỉ định IP đó, không phải 192.168.0.191IP máy chủ từ xa . PostgreSQL không thể liên kết với địa chỉ IP của máy chủ từ xa.

Bạn không nói "ai được phép kết nối", bạn đang nói "giao diện nào PostgreQuery nên chấp nhận kết nối trên". Bit "ai được phép kết nối" là tiếp theo và được định cấu hình pg_hba.conf.

Vì vậy: Hãy thử '192.168.0.192, localhost'. Hoặc chỉ *, vì bạn có thể thực sự muốn nghe trên tất cả các giao diện mạng.


1
Nó hoạt động. Vậy có sự khác biệt thực tế nào giữa danh sách và '*' không?
zabouti

10
@zabouti Chắc chắn rồi. Nếu máy chủ của bạn có (nói) hai giao diện mạng bên ngoài, bạn có thể yêu cầu PostgreSQL chỉ liên kết với một trong số chúng, do đó thậm chí không thể thực hiện kết nối TCP với PG trên mạng kia. Đây chủ yếu là một mức bảo mật bổ sung cho một hệ thống có nhiều giao diện cho các miền bảo mật khác nhau. Khá tiện lợi khi kết hợp với Vlan, chuyển mạch ảo, v.v ... Việc sử dụng phổ biến nhất là cài đặt nó để localhostkhông thể kết nối TCP / IP từ bất kỳ giao diện mạng bên ngoài nào, chỉ có địa chỉ loopback.
Craig Ringer

1
@CraigRinger: một câu trả lời rất hay!
franc

@CraigRinger bạn nên thêm những bình luận đó vào câu trả lời của mình. Đó là thông tin rất hữu ích.
João Portela

1
Vâng tôi nghĩ rằng nhận xét có thể còn tốt hơn câu trả lời. Đá vào Craig!
Darth Egregious 7/10/2015

2

Tôi đã thấy rằng thay vì sử dụng localhostnó cần phải có 127.0.0.1nếu bạn chỉ định bất kỳ địa chỉ nào khác.

Vì vậy, trong trường hợp tôi nghe địa chỉ IP máy chủ Docker cũng như localhost, nhưng không phải IP bên ngoài, điều này không hoạt động (tôi nhận được kết nối bị từ chối từ bên trong các container Docker của mình):

listen_addresses = '172.17.0.1, localhost'

Nhưng điều này không:

listen_addresses = '172.17.0.1, 127.0.0.1'

0

Mục 0.0.0.0 cho phép nghe tất cả các địa chỉ IPv4 và :: cho phép nghe tất cả các địa chỉ IPv6. Nếu danh sách trống, máy chủ hoàn toàn không nghe trên bất kỳ giao diện IP nào, trong trường hợp đó chỉ có thể sử dụng ổ cắm tên miền Unix để kết nối với nó.

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.