У меня есть пулемет, обслуживающий приложение фляги за Apache с использованием mod_proxy.
Gunicorn включен http://localhost:8080/
. Допустим, мой сервер включен http://example.com/
Иногда, когда я публикую неверную ссылку на свой сервер (например, забываю конечную), скажем, http://example.com/with-no-trailing-slash
, пользователь перенаправляется на http://localhost:8080/with-no-trailing-slash
что недопустимо, потому что на клиентском компьютере нет сервера.
Вы знаете, почему он так себя ведет? И как исправить такое поведение?
Чтобы запустить пулемет, я делаю так: 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>
Если вам нужен другой файл конфигурации, дайте мне знать!
Вам не хватает обратного сопоставления, которое как раз полезно Apache для перезаписи URL-адресов перенаправления. В 99% случаев прямое и обратное сопоставления совпадают.
Добавь это :
ProxyPassReverse / http://localhost:8080/
И перезагрузите Apache.