无法在我的 apache 服务器内对 Flask 应用程序(用于 MySQL 连接)进行远程 api 调用

问题描述 投票:0回答:1

我有一个在 Alma Linux 上运行的 apache 服务器。我有 Flask 代码设置来接受来自远程连接的 API 调用。所以我的 API 调用命中了 Flask,然后它连接到 MySQL 数据库。

当我尝试在服务器内部本地运行此数据库连接代码时,它工作正常。但是当我尝试通过远程 API 调用来访问 Flask 应用程序时,我得到了

Database error: 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (13)

这很奇怪,因为我可以在服务器内部本地连接到数据库。

我还写了一个虚拟端点。

@app.route('/')
def test_endpoint():
        return 'Hello World'

此端点通过远程 API 调用工作。

我的连接数据库的代码

import mysql.connector
from flask import Flask

app = Flask(__name__)
df_config = {connection parameters}

@app.route('/db_test', methods=['GET','POST'])
def db_test():

  try:
     conn = mysql.connector.connect(**db_config)
     return Statement

  except Error as e:
     return jsonify({'success': False, 'message': f"Database error: {e}. Contact the researcher"}), 500  

我检查了 MySQL 正在端口 3306 上运行,并且我拥有必要的数据库权限。我还尝试在 MySQL 配置文件中注释“bind-address = 127.0.0.1”。

请帮我解决问题。

python mysql linux apache flask
1个回答
0
投票

评论太长,但因此我们也不会成为完整的答案,因为我认为您没有可以通过编程更改来解决的编程问题。

问题中的错误消息是由 mysql client 尝试使用套接字连接连接到 mysql 服务器产生的。当连接失败时,除了一般错误消息之外,它还会返回套接字错误号 (13)。

套接字错误13代表“权限被拒绝”。这意味着 mysql client 没有使用网络连接的权限。 Mysql 客户端是 Flask / Python 的一部分,但 Flask 是由您的 Web 服务器 apache 运行的。

您有两个选择:

  1. 由于 mysql 服务器与 apache 托管在同一台计算机上,因此使用 sock 文件连接而不是使用套接字。这里有几个如何做到这一点的例子。

  2. 您需要授予 apache Web 服务器或运行 apache 的用户帐户使用套接字连接的权利。 SO 的 Serverfault 姐妹网站可以帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.