找不到具有此特定设置的问题,因此在我的情况下无法使其他一些答案起作用。
我有一台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 Internal Server Error。我可以看到我的“未登录”重定向似乎可以正常工作,并将我带到https://myphpwebsite.com/foo/login,但是再次导致500错误。
答案 0 :(得分:0)
我有相同的设置(apache,php,gunicorn,flask),最适合我的是使用VirtualHost
并将ProxyPass
嵌入到Location
指令中。所以我的配置文件看起来像
<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 als),并且对https://mydomein.com/foo的所有请求都被委派给GUnicorn(侦听端口8000)。