Apache 和 Flask:尝试将目录作为脚本调用

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

我有一个 Apache(2.2.15 版)服务器(在 Linux CentOS 上运行),其中有很多 .cgi 脚本位于 /var/www/cgi-bin 中,别名:

ScriptAlias /cgi-bin "/var/www/cgi-bin"

当我输入 mydomain/cgi-bin/something.cgi.

时它工作正常

现在我还想让 Flask 应用程序在 Apache 服务器的 80 端口上运行。该应用程序位于/var/www/cgi-bin/app。所以,我创建了简单的 Flask 应用程序 - a.py:

from flask import Flask
app = Flask(__name__)

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

a.wsgi 文件:

import sys
import site
sys.path.insert(0, '/var/www/cgi-bin/app')
site.addsitedir('/var/www/cgi-bin/app:/<my_python_path>/Lib/site-packages')
from app import app as application

还在 /etc/httpd/conf/httpd.conf 中我创建了所需的虚拟主机:

<VirtualHost *:80>
ServerName app.<mydomain>:80
WSGIDaemonProcess app python-path=/var/www/cgi-bin/app:/<my_python_path>/Lib/site-packages user=user1 group=user1 threads=5
WSGIScriptAlias /cgi-bin/app /var/www/cgi-bin/app/a.wsgi
<Directory /var/www/cgi-bin/app>
    WSGIProcessGroup app
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Directory>
ErrorLog /var/www/cgi-bin/app/logs/error.log
CustomLog  /var/www/cgi-bin/app/logs/custom.log combined
</VirtualHost>

但是每次我尝试在 error.log 文件中打开 mydomain/cgi-bin/app/ 时,我都会看到此错误:

(...) attempt to invoke directory as script: /var/www/cgi-bin/app/

你知道我在这里做错了什么吗?

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

您不应该将 Flask 应用程序放在

cgi-bin
下,事实上它根本不应该放在 DocumentRoot 下。将其完全移到其他地方 - 我喜欢
/srv/
,但这取决于你 - 并适当更改 WSGI 别名。

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