部署Django应用至Render遇PostgreSQL SSL连接错误求助
解决Django连接Render PostgreSQL时的SSL协商错误
问题现象
启动部署在Render的Django应用时,出现数据库连接错误:
django.db.utils.OperationalError: connection to server at "viaduct.proxy.rlwy.net" (35.212.103.87), port 52584 failed: received invalid response to SSL negotiation: I
修复步骤
强制启用SSL连接
Render托管的PostgreSQL要求必须通过SSL连接,需在Django数据库配置中明确添加SSL参数:直接配置数据库参数的写法:
# settings.py import os DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': os.environ.get('DB_NAME'), 'USER': os.environ.get('DB_USER'), 'PASSWORD': os.environ.get('DB_PASSWORD'), 'HOST': os.environ.get('DB_HOST'), 'PORT': os.environ.get('DB_PORT'), 'OPTIONS': { 'sslmode': 'require', # 关键配置项 }, } }使用
dj-database-url解析Render提供的DATABASE_URL的写法:# settings.py import os import dj_database_url DATABASES = { 'default': dj_database_url.config( default=os.environ.get('DATABASE_URL'), conn_max_age=600, ssl_require=True # 强制启用SSL ) }替换psycopg2为psycopg2-binary
在requirements.txt中使用预编译版本的psycopg2,避免Render部署时的编译问题:psycopg2-binary>=2.9.0 django>=4.0 # 根据你的实际Django版本调整验证环境变量准确性
检查Render平台上设置的环境变量,确保DB_HOST、DB_PORT、DB_NAME、DB_USER、DB_PASSWORD完全匹配Render PostgreSQL实例提供的信息,尤其是代理地址和端口不能出错。本地调试注意事项
如果本地调试时连接Render数据库,需确保本地网络未阻止对应端口的SSL连接,同时保持上述SSL配置不变。
内容的提问来源于stack exchange,提问作者JERICK
相关产品推荐
相关产品推荐

