mod_wsg 由 apache 提供 flask 和静态文件

mod_wsg with flask and static files served by apache

我正在尝试使用用于 API 的烧瓶应用程序设置 apache 服务器。 我希望访问 mydomain.com 的用户从 apache 获得 index.html 服务,如果向 mydomain 发出请求。com/api flask 应该服务 json.

我可以得到 index.html 就好了,但是当我访问我的域时。com/api 我得到 404 未找到。

这是我的 apache 配置。

<VirtualHost *:80>
        ServerName temp.mydomain.com
        ServerAlias mydomain.com
        ServerAdmin webmaster@mydomain.com

        WSGIDaemonProcess incubator-web user=incubator-web group=www-data home=/var/www/incubator-web threads=5
        WSGIScriptAlias /api/ /var/www/incubator-web/incubator-web.wsgi
        Alias / /var/www/incubator-web/html/

        <Directory /var/www/incubator-web>
                WSGIProcessGroup incubator-web
                WSGIApplicationGroup %{GLOBAL}
                WSGIScriptReloading On
                Require all granted
        </Directory>
        ErrorLog /var/www/incubator-web/logs/error.log

        <Directory /var/www/incubator-web/html>
                Require all granted
        </Directory>
</VirtualHost>

还有我的烧瓶应用程序:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, World!"

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

和我的 .wsgi 文件:

#!/usr/bin/python
import sys
sys.path.insert(0, '/var/www/incubator-web')
from incubator_web import app as application

我对这一切还很陌生,所以我猜我遗漏了一些明显的东西。

删除:

Alias / /var/www/incubator-web/html/

添加:

DocumentRoot /var/www/incubator-web/html/

Alias 设置为 / 会隐藏 WSGI 应用程序,因为 Alias 优先于 WSGIScriptAliasDocumentRoot 是指定默认文档目录的正确方法。