首页 > 解决方案 > 尝试将 Flask 应用程序部署到 Apache 时出现 404

问题描述

我正在尝试将 Flask 应用程序部署到基于 Linux 的服务器上,但没有成功。我已经查看了 stackoverflow 上的不同方法和条目,但似乎没有任何效果。为了更简洁地测试它,我创建了一个尝试在本地运行的简单测试应用程序:

/var/www/test

测试.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index ():
        return "Hello World!"

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

测试.wsgi

from test import app as application

和一个空__init__.py文件。

/etc/apache2/sites-available

测试.conf

<VirtualHost *>
    ServerName *Local IP address*

    WSGIDaemonProcess test user=www-data group=www-data threads=5
    WSGIScriptAlias / /var/www/test/test.wsgi

    <Directory /var/www/test>
        WSGIProcessGroup test
        WSGIApplicationGroup %{GLOBAL}
        Require all granted
    </Directory>
</VirtualHost>

test.conf 文件是通过 apt 在我的本地 Debian Buster 发行版上注册a2ensite test.conflibapache2-mod-wsgi安装的,我正在(localhost)上测试它。Python2 和 3 与 Flask 一起安装。每个文件和test文件夹都归 www-data 所属,组为 www-data。当然,每次更改后我都会重新启动应用程序service apache2 restart

我可以在 localhost:5000 上成功运行应用程序python test.py,打印“Hello World!”。

我在 Apache 错误日志中也没有看到任何可疑之处,只是:

[Sun Oct 27 22:16:55.923721 2019] [mpm_event:notice] [pid 26336:tid 140548964586624] AH00489: Apache/2.4.38 (Debian) mod_wsgi/4.6.5 Python/2.7 configured -- resuming normal operations
[Sun Oct 27 22:16:55.923771 2019] [core:notice] [pid 26336:tid 140548964586624] AH00094: Command line: '/usr/sbin/apache2'

我错过了什么?为什么我会收到 404?有什么方法可以查看应用程序是否正在运行或只是尝试运行?

标签: pythonapacheflaskwsgi

解决方案


ServerName *Local IP address*<-这个。您不能在那里使用 IP,它必须是主机名(与您在访问的 URL 中使用的主机名匹配)。如果您使用 IP 访问您的服务器,它将默认为第一个定义的虚拟主机,因为它不会匹配任何服务器名称,这可能不是您刚刚定义的那个。

因此,要么将主机名放在那里并在hosts文件中定义它,如果它是一个无法解析的名称,或者编辑默认虚拟主机(虚拟主机按字母数字顺序加载,这意味着除非test.conf是列出时的第一个条目sites-available,否则它不是第一个一个并且在使用IP访问服务器时不会使用)。


推荐阅读