尝试将 Flask 应用程序部署到 Apache 时出现 404
404 when trying to deploy Flask app to Apache
我正在尝试将 Flask 应用程序部署到基于 Linux 的服务器,但没有成功。我已经查看了 Whosebug 上的不同方法和条目,但似乎没有任何效果。为了更清晰地测试它,我创建了一个简单的测试应用程序,我试图在本地 运行:
在/var/www/test
中:
test.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index ():
return "Hello World!"
if __name__ == '__main__':
app.run()
test.wsgi
from test import app as application
和一个空的 __init__.py
文件。
在/etc/apache2/sites-available
中:
test.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 文件是通过 a2ensite test.conf
注册的,libapache2-mod-wsgi
是通过 apt 安装在我本地的 Debian Buster 发行版上的,我正在 (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?有什么方法可以查看应用程序是 运行ning 还是只是试图 运行?
ServerName *Local IP address*
<- 这个。你不能在那里使用 IP,它必须是一个主机名(与你在 URL 中使用的主机名相匹配)。如果您使用 IP 访问您的服务器,它将默认为第一个定义的虚拟主机,因为它不会匹配任何服务器名称,这可能不是您刚刚定义的。
因此,要么将主机名放在那里并在您的 hosts
文件中定义它,如果它是一个无法解析的名称,或者编辑默认虚拟主机(虚拟主机按字母数字顺序加载,这意味着除非 test.conf
是listing时的第一个条目sites-available
,不是第一个,用IP访问服务器时不会用到)。
我正在尝试将 Flask 应用程序部署到基于 Linux 的服务器,但没有成功。我已经查看了 Whosebug 上的不同方法和条目,但似乎没有任何效果。为了更清晰地测试它,我创建了一个简单的测试应用程序,我试图在本地 运行:
在/var/www/test
中:
test.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index ():
return "Hello World!"
if __name__ == '__main__':
app.run()
test.wsgi
from test import app as application
和一个空的 __init__.py
文件。
在/etc/apache2/sites-available
中:
test.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 文件是通过 a2ensite test.conf
注册的,libapache2-mod-wsgi
是通过 apt 安装在我本地的 Debian Buster 发行版上的,我正在 (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?有什么方法可以查看应用程序是 运行ning 还是只是试图 运行?
ServerName *Local IP address*
<- 这个。你不能在那里使用 IP,它必须是一个主机名(与你在 URL 中使用的主机名相匹配)。如果您使用 IP 访问您的服务器,它将默认为第一个定义的虚拟主机,因为它不会匹配任何服务器名称,这可能不是您刚刚定义的。
因此,要么将主机名放在那里并在您的 hosts
文件中定义它,如果它是一个无法解析的名称,或者编辑默认虚拟主机(虚拟主机按字母数字顺序加载,这意味着除非 test.conf
是listing时的第一个条目sites-available
,不是第一个,用IP访问服务器时不会用到)。