首页 > 解决方案 > 504 连接错误烧瓶 Nginx uWSGI Ubuntu

问题描述

大家好,我希望我能在这件事上得到一些指导。我有一个在 ubuntu 服务器上设置的烧瓶应用程序。它使用 ssh 创建一个到具有 mysql 数据库的 Centos 7 服务器的隧道。在 Ubuntu 服务器上使用 python 运行此应用程序后,我能够完美地登录到我的应用程序并从域 ip 中查看数据库中的数据。现在,在尝试在 nginx 和 uWSGI 上运行应用程序时,我实际上可以从我的域名访问登录页面。但是在输入我的凭据并尝试登录后,页面加载大约一分钟,我收到504 Connection Time Out Error

我是否会收到此消息,因为我的应用程序在处理来自我的数据时尝试访问另一台服务器。我不确定,也没有任何帮助。这是我的文件

服务器块

server {
    listen 80;
    server_name itinareport.tk www.itinareport.tk;

    location / {
        uwsgi_read_timeout 600;
        include uwsgi_params;
        uwsgi_pass unix:/home/pinchrep2/itinarep/itinarep.sock;
    }
}

.ini 文件

[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = itinarep.sock
chmod-socket = 660
vacuum = true

die-on-term=true

wsgi.py

from main import  app


if __name__ == "__main__":
    app.run()

服务文件

[Unit]
Description=uWSGI instance to serve itinarep
After=network.target

[Service]
User=pinchrep2
Group=www-data
WorkingDirectory=/home/pinchrep2/itinarep
Environment="PATH=/home/pinchrep2/itinarep/it_venv/bin"
ExecStart=/home/pinchrep2/itinarep/it_venv/bin/uwsgi --ini itinarep.ini

[Install]
WantedBy=multi-user.target

这是我从主 py 文件 main.py SSH 的地方

sshforward = SSHTunnelForwarder(
    ("public ip", 22),
   ssh_username = 'user',
   ssh_password = 'pass',
   remote_bind_address = ('127.0.0.1', 3306)
)
sshforward.start()
local_port = sshforward.local_bind_port

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://root@localhost:{local_port}/asteriskcdrdb"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

同样,我只需要部署它。请明智地指出正确的方向配置。我可以进入应用程序,但一旦登录我就会收到此问题。

标签: pythonmysqlnginxflaskuwsgi

解决方案


当您的数据库连接 url 引用“localhost”时,它实际上是通过 unix 套接字连接的。

您可以使用包含 unix 套接字的 local_bind_address 连接?unix_socket=/path/to/mysql.sockSQLALCHEMY_DATABASE_URI类似这个答案

似乎连接到远程 unix 套接字正在等待实施此上游问题


推荐阅读