nginx 通过express.js访问Postgres不适用于Ubuntu环境变量

aurhwmvo  于 2023-06-05  发布在  Nginx
关注(0)|答案(1)|浏览(123)

我有一个PERN堆栈是不工作,由于以下'错误:用户“postgres”的密码验证失败。
在Ubuntu 22.04.2上运行的postgres(14.8)中,我可以从(Ubuntu)用户ubuntupostgres登录postgres,使用环境变量和对等身份验证。命令psql -d testdb让我以ubuntu登录。printenv

PGPORT=5432
PGPASSWORD=password
PGUSER=ubuntu
PGDATABASE=testdb
PGHOST=localhost

所以上面的工作正常,但是我的express.js应用程序发出了一个请求,导致'error:用户“postgres”的密码验证失败,并且浏览器中的网关超时504。
下面是/etc/postgresql/14/main/pg_hba.conf:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256

我需要做些什么来配置(Ubuntu)用户www-data,使其使用自己的环境变量访问postgres?
有人知道这是怎么回事吗?

iklwldmw

iklwldmw1#

我找到了一个编程解决方案(不使用环境变量),将以下内容添加到我的应用程序中:

const pool = new Pool({
        user: 'ubuntu',
        host: 'localhost',
        database: 'testdb',
        password: 'password',
        port: 5432,
    });

但我还不明白为什么node-postgres在一种情况下可以很好地处理环境变量,而在另一种情况下却不行,据我所知,在另一种情况下,一切都是一样的。
这不起作用:

const pool = new Pool({
        user: process.env.PGUSER,
        host: process.env.PGHOST,
        database: process.env.PGDATABASE,
        password: process.env.PGPASSWORD,
        port: process.env.PGPORT, 
    });

谁有更好的解决方案,允许环境变量?

相关问题