Apache mod_wsgi 在虚拟主机上提供 rest api 和静态网站服务

Apache mod_wsgi 在虚拟主机上提供 rest api 和静态网站服务

因此,我有一个运行 debian、apache 和 mod_wsgi 的 ec2 实例来为我的 flask rest api 提供服务,并且我还有一个使用 react 的静态网页,它调用 api 来抽象数据库逻辑。

我已经设置了静态网页,但无法通过路由到 /api 端点来调用 flask 服务器。我希望它们可以从同一端口访问,这样我就可以在基础 / 路由上使用静态站点,并且可以使用同一地址 /api/<API END POINT> 进行 api 调用。我还没有看到任何其他解决此特定用例的问题,所以希望我的方法没有完全错误。

这是虚拟主机的设置,我试图为 /api 设置一个别名,但这似乎是我能让它工作得最接近的。

    LogLevel debug
    DocumentRoot /var/www/html/front-end
    Alias / /var/www/html/front-end/
    <Directory /var/www/html/front-end>
        DirectoryIndex index.html
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
 WSGIDaemonProcess api python-home=/var/www/html/api/venv threads=5
    WSGIScriptAlias /api /var/www/html/api/app.wsgi
    <Location "/api">
        WSGIProcessGroup api
        WSGIApplicationGroup %{GLOBAL}
        Require all granted
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我的 wsgi 文件如下所示

activate_this = '/var/www/html/api/venv/bin/activate_this.py'
with open(activate_this) as f:
    exec(f.read(), dict(__file__=activate_this))
import sys
import logging
logging.basicConfig(stream=sys.stderr)
logging.getLogger().setLevel(logging.DEBUG)
sys.path.insert(0,"/var/www/html/api")
sys.path.insert(0, "/var/www/html/api/venv/lib/python3.11/site-packages")
from api import app as application

我可以看到问题是,当我访问 /api 端点时,它会在 /front-end/api/ 中查找文件,而不是将该请求转发到 flask 服务器。我也尝试添加

ProxyPass /api http://localhost:5000/api
ProxyPassReverse /api http://localhost:5000/api

虽然这可行,但意味着我必须运行本地开发服务器,这似乎不安全。

我在这里先向您的帮助表示感谢!

相关内容