Django无法连接到服务器:权限被拒绝。服务器是否在主机上运行并接受端口远程主机的TCP/IP连接?

3
我有一个奇怪的问题。我可以使用命令行中的psql连接到远程主机,但是在django设置文件中使用完全相同的凭据却无法连接。我收到以下错误消息:
“无法连接到服务器:权限被拒绝。主机“remote ip”是否在端口port_number上接受TCP/IP连接?”
如果我可以使用psql连接,而不能使用django,那我错过了什么?我还通过python解释器检查了是否可以加载psycopg2。
由于我在网上找到的内容都没有帮助,所以非常感谢任何帮助。
以下是settings.py中的db配置:
'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', 
        'NAME': '<db name goes here>', # Or path to database file if using sqlite3.
        'USER': '<db user>', # Not used with sqlite3.
        'PASSWORD': '<pswd goes here>', # Not used with sqlite3.
        'HOST': '<remote ip goes here>', 
        'PORT': '5432', 
}

1
您需要发布一些示例代码/配置。 - Jack M.
1
我可以这么做...但是下面有个更有趣的选择...我可以运行命令python manage.py runserver并使用网站...这应该与apache有关,但是apache和数据库连接有什么关系呢? - deecodameeko
1
当然可以。Apache作为一个模块运行你的应用服务器(mod_wsgi)。如果Postgres只允许特定用户连接,那么作为wsgi/apache运行的用户可能没有连接到数据库的权限。 - Timmy O'Mahony
4个回答

9
根据您的描述,这与Apache及其访问数据库的权限有关。您没有提及使用的操作系统,但如果正在运行SELinux,则默认规则会防止Apache连接到数据库。如果是这种情况,您可以通过运行以下命令来临时启用它:
setsebool httpd_can_network_connect_db

Here are more detailed instructions.


啊,对不起...这是在Red Hat操作系统上。 - deecodameeko
好的,问题解决了...之后重启一下,一切都正常了。干杯! - deecodameeko

5

为了使更改在重新启动后保持不变(在Centos上测试过):

setsebool -P httpd_can_network_connect_db on

点击此处阅读更多信息。


0

已在CentOS上测试。

service httpd stop

service postgresql stop

setsebool -P httpd_can_network_connect 1

service httpd start

service postgresql start

0

将错误的身份验证凭据提供给Django应用程序可能会导致此问题。为了解决它,您可以按照以下步骤进行操作:

  1. 检查Postgres是否已安装:

    apt show postgresql

  2. 检查PostgreSQL是否正在运行:

    sudo service postgresql status

  3. 检查您是否可以实际连接到PostgreSQL

    sudo su - postgres

  4. 一旦在用户postgres中运行命令接口

    psql

  5. 通过运行以下命令检查连接信息:

    \conninfo

在我的情况下,我很久以前安装了Postgres,只是忘记访问信息,例如用户名、密码、数据库名称或端口访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接