【问题标题】:How to run Flask app on same server as a PHP/Apache website?如何在与 PHP/Apache 网站相同的服务器上运行 Flask 应用程序?
【发布时间】:2020-01-17 04:12:55
【问题描述】:

找不到具有此特定设置的问题,因此无法使其他一些答案在我的情况下起作用。

我有一个 CentOS 服务器运行一个基于 PHP 的网站,Apache 作为 Web 服务器(工作正常)。我现在正在尝试在不同的端口上部署基于 Flask 的应用程序(使用通过 Apache 代理的 Gunicorn)。

在我的主要 httpd.conf 文件中,我有:

<IfModule proxy_module>
# Include the proxy information for VMS Flask Application
Include conf/extra/httpd-foo.conf
</IfModule>

在我的 httpd-foo.conf 文件中,我有:

ProxyPreserveHost On
ProxyPass /foo http://localhost:8000/
ProxyPassReverse /foo http://localhost:8000/
Timeout 2400
ProxyTimeout 240

PHP 网站运行于:https://myphpwebsite.com 我希望 Flask 应用程序在以下位置运行:https://myphpwebsite.com/foo

我遇到的问题是当我访问 Flask URL 时,我遇到了 2 个问题。首先,如果我在“foo”之后不包含斜杠,我会得到一个 404(因为该目录实际上并不存在于真实的 Web 目录中。第二个问题是我所有的 Flask 路由都假定“/”是“ root”,现在不是。我不知道如何告诉 Flask 所有路由都应该在它们前面加上“/foo”。

这可能吗?

-- 一些附加信息--

我尝试使用“-E”选项运行 gunicorn 命令,告诉它 SCRIPT_NAME 似乎只对主页有帮助:

gunicorn app:app -b 0.0.0.0:8000 -t 180 -e SCRIPT_NAME=/foo -w 4

目前,如果我访问 https://myphpwebsite.com/foo/ 会导致 500 内部服务器错误。我可以看到我的“未登录”重定向似乎可以正常工作并将我带到 https://myphpwebsite.com/foo/login,但它再次导致 500 错误。

【问题讨论】:

    标签: apache flask gunicorn


    【解决方案1】:

    我有类似的设置(apache、php、gunicorn、flask),对我有用的是使用VirtualHost 并将ProxyPass 嵌入到Location 指令中。所以我的 conf 文件看起来像

    <VirtualHost *:80>
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
    
        ProxyPreserveHost On
        <Location "/foo">
              ProxyPass "http://127.0.0.1:8000/"
              ProxyPassReverse "http://127.0.0.1:8000/"
        </Location>
    </VirtualHost>
    

    这样,对https://mydomein.com/ 的调用由 Apache 管理(始终管理 php),对https://mydomein.com/foo 的所有请求都被委托给 GUnicorn(侦听端口 8000)。

    【讨论】:

    • 路径的 /foo 部分会发生什么,是发送给 GUnicorn 的吗?在我的情况下,我看到请求被代理,但 Flask 服务器总是回答 404,所以我怀疑我搞砸了正确重写路径的配置。
    • 抱歉回复晚了。是的,在这个配置中,对/foo 的请求被代理到 GUnicorn。由于您声明 Flask 正在返回 404,因此您的问题似乎确实在管道的某个更远的地方......
    猜你喜欢
    • 2015-03-27
    • 2018-06-08
    • 2019-07-27
    • 2015-10-30
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    相关资源
    最近更新 更多