Connection to database Failed: FATAL: no pg_hba.conf entry for host "10.129.195.161",user "appexternal",database "insightdb",SSL off
核心难点,遇到这个问题排查了很长时间没有相关文档:
从两个方便排查:
1 外部ip请求被拒绝。
2 db server 端开了ssl 协议对应的,c 端的没有开启ssl协议。
笔者的排查过程:
1 对外部请求判断是否被拒。可以查看一下配置:
定位到#listen_addresses='localhost’。Postgresql安装完成后,默认是只接受来在本机localhost的连接请 求。将行开头都#去掉,将行内容修改为listen_addresses='*'来允许数据库服务器监听来自任何主机的连接请求。
# TYPEDATABASEUSERCIDR-ADDRESSMETHOD
# IPv4 local connections:
hostallall127.0.0.1/32md5
hosttestdbpostgres192.1.1.2/32md5
host all all 0.0.0.0/0 md5
以上红色部分为新添加的项。
以上内容需要注意以下两点:
2. CIDR-ADDRESS(用户的IP范围)的值的格式是:IP/数值
数值取值范围为:0,8,16,24,32 即表示掩码bit的个数;
例如:
32 -> 192.168.1.1/32 表示必须是来自这个IP地址的访问才合法;
24 -> 192.168.1.0/24 表示只要来自192.168.1.0 ~ 192.168.1.255的都合法;
16 -> 192.168.0.0/16 表示只要来自192.168.0.0 ~ 192.168.255.255的都合法;
8-> 192.0.0.0/16 表示只要来自192.0.0.0 ~ 192.255.255.255的都合法;
0-> 0.0.0.0/0 表示全部IP地址都合法,/左边的IP地址随便了只要是合法的IP地址即可;
可以通过:postgresql-9.5.4/src/test/examples/testlibpq.c 测试连接是否正常。
一开始和客户狂车牌后来发现是 后来发现是编译没有加入ssl 协议。
我的配置是可选参数设置如下
:
./configure --prefix=/opt/pgsql9.3.2 --with-pgport=5432 --with-perl --with-python --with-tcl --with-openssl --with-pam --without-ldap --with-libxml --with-libxslt --enable-thread-safety --with-wal-blocksize=16 --with-blocksize=16 --enable-dtrace --enable-debug
配置选项说明:
--with-pgport=5432:为服务器和客户端设置默认端口号。默认是5432。
--with-perl:编译PL/Perl服务端语言。
--with-python:编译PL/Python服务端语言。
--with-tcl:编译PL/Tcl服务端语言。
--with-openssl:编译支持SLL(加密)连接。这需要安装OpenSSL包。
--with-pam:编译支持PAM(Pluggable Authentication Modules,可插拔认证模块)
--without-ldap:编译支持认证和连接参数检查
--with-libxslt:编译xml2模块,使用libxslt
--enable-thread-safety:让客户端库是线程安全的
--with-wal-blocksize=16:WAL:预写式日志(Write-Ahead Logging)
设置WAL的block size,以MB为单位。这是在WAL日志中的每个独立文件的大小。为了控制WAL日志传送的粒度去调整其大小,这可能是非常有用的。默认为16MB。这个值必须是2的1到64次方(MB)。注意,改变这个值需要一个initdb。
--with-blocksize=16:设置block size,以KB为单位。这是表的存储和IO单元。默认为8K,适用于大多数情况;但是在特殊场合中,其他的值可能是非常有用的。这个值必须是2的1到32次方(KB)。注意,改变这个值需要一个initdb。
--enable-debug:把所有程序和库以带有调试符号的方式编译
--enable-nls[=LANGUAGES]:打开本地语言支持(NLS),即以非英文显示程序的信息的能力。LANGUAGES是一个空格分隔的语言代码列表,标识你想支持的语言。比如--enable-nls='de fr'。(你提供的列表和实际支持的列表之间的交集将会自动计算出来。)如果你没有声明一个列表,那么就安装所有可用的翻译。
(还可以在--enable-debug前,添加两个选项:--enable-depend --enable-cassert)
配置过程可能会遇到依赖的动态库缺失,安装这些缺失的库即可。
记录下我这里的缺失lib的安装:
dtrace工具的安装: