要将 PostgreSQL(pq
)暴露到外部网络并允许外部连接,你需要进行一些配置,具体包括以下几个步骤:
1. 修改 postgresql.conf
配置文件
PostgreSQL 默认只允许本地连接。如果你希望允许远程连接,需要修改 PostgreSQL 配置文件中的 listen_addresses
和 port
配置。
-
打开
postgresql.conf
配置文件:sudo nano /etc/postgresql/<version>/main/postgresql.conf
-
找到
listen_addresses
配置,通常它会被注释掉或者设置为localhost
。你需要将其修改为*
(表示接受任何主机的连接),或者你也可以指定特定的 IP 地址来限制连接。修改前:
#listen_addresses = 'localhost'
修改后:
listen_addresses = '*'
如果你只想允许某些特定 IP 地址的连接,可以将
*
替换为具体的 IP 地址,比如:listen_addresses = '192.168.1.100'
-
确保端口号设置正确(如果需要的话),通常默认为
5432
。找到port
配置项:port = 5432
2. 修改 pg_hba.conf
配置文件
PostgreSQL 还使用 pg_hba.conf
文件来控制哪些用户和主机可以连接到数据库。你需要修改该文件来允许外部连接。
-
打开
pg_hba.conf
文件:sudo nano /etc/postgresql/<version>/main/pg_hba.conf
-
添加一个允许外部连接的规则。例如,要允许来自任意 IP 地址(
0.0.0.0/0
)的连接,可以添加以下行:host all all 0.0.0.0/0 md5
这条规则表示:
host
: 允许通过 TCP/IP 连接。all
: 所有数据库。all
: 所有用户。0.0.0.0/0
: 允许任何 IP 地址连接。md5
: 使用密码认证。
如果你只希望允许来自特定 IP 地址段的连接,可以将
0.0.0.0/0
替换为你指定的地址段,例如192.168.1.0/24
。
3. 防火墙配置
确保服务器的防火墙允许外部访问 PostgreSQL 的端口(默认是 5432)。
-
检查防火墙状态: 在 Debian 或 Ubuntu 上,你可以使用
ufw
(Uncomplicated Firewall)来配置防火墙规则:sudo ufw status
-
允许 PostgreSQL 的端口(5432): 如果防火墙启用了
ufw
,你可以使用以下命令允许 5432 端口:sudo ufw allow 5432/tcp
-
如果使用其他防火墙工具(如
iptables
),确保相应的规则允许 PostgreSQL 端口的外部访问。
4. 重启 PostgreSQL 服务
配置完成后,重启 PostgreSQL 服务以使配置生效:
sudo systemctl restart postgresql
5. 连接到 PostgreSQL
一旦 PostgreSQL 配置好接受外部连接并且防火墙允许外部访问,你可以尝试从外部主机连接到 PostgreSQL 数据库。例如,使用 psql
从远程主机连接:
psql -h <your-server-ip> -U <your-username> -d <your-database>
确保替换 <your-server-ip>
、<your-username>
和 <your-database>
为实际的服务器 IP 地址、用户名和数据库名。
小结
- 修改
postgresql.conf
让 PostgreSQL 监听外部连接。 - 配置
pg_hba.conf
允许外部 IP 连接。 - 配置防火墙允许访问 PostgreSQL 端口。
- 重启 PostgreSQL 服务应用更改。