我有一个 gunicorn,使用 mod_proxy 在 Apache 后面为 flask 应用程序提供服务。
Gunicorn 已开启http://localhost:8080/
。假设我的服务器已开启http://example.com/
有时,当我向服务器发布无效链接(例如忘记了尾随链接)时,假设http://example.com/with-no-trailing-slash
用户被重定向到http://localhost:8080/with-no-trailing-slash
无效的页面,因为客户端计算机上没有服务器。
你知道为什么会出现这种情况吗?以及如何修复此行为?
要启动 gunicorn,我执行以下操作:sudo gunicorn -b localhost:8080 app:app
<VirtualHost *:80>
ServerName example.com
ServerAlias example.com
DocumentRoot /opt/example
<Proxy *>
AuthType basic
AuthBasicAuthoritative Off
SetEnv proxy-chain-auth On
Order allow,deny
Allow from all
</Proxy>
# Let apache serve static files
ProxyPass /robots.txt !
ProxyPass /favicon.ico !
ProxyPass /static/ !
Alias /static/ /opt/example/app/static/
# Gunicorn handle the others
ProxyPass / http://localhost:8080/
# robots.txt et favicon.ico sont dans /path/to/django/project/static/
Alias /robots.txt /path/to/django/project/static/robots.txt
Alias /favicon.ico /path/to/django/project/static/favicon.ico
Alias /favicon.ico /path/to/django/project/static/favicon.ico
<Directory /path/to/django/project>
Order deny,allow
Allow from all
Options -Indexes
</Directory>
</VirtualHost>
如果您需要另一个配置文件,请告诉我!
答案1
您缺少反向映射,而反向映射对于 Apache 重定向 URL 重写非常有用。在 99% 的情况下,正向和反向映射是相同的。
添加此内容:
ProxyPassReverse / http://localhost:8080/
并重新加载 Apache。