обрабатывать относительные URL с помощью Apache ProxyPass - PullRequest
0 голосов
/ 03 февраля 2019

Я провел два вечера, пытаясь решить эту проблему.Я использую Apache 2.4 в качестве прокси для перенаправления подключений к одному из моих Docker-контейнеров (простой wordpress, ничего особенного) для прослушивания порта 8081.

Этот конф работает:

<VirtualHost *:80>
    ServerName domain.eu

    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
</VirtualHost>

Однако внутренние URL (css файлы, js, inline href) не работают.Вот пример

Из того, что я прочитал, это классика, на которую мы указали в этом посте .Тем не менее, я попробовал несколько известных способов решения этой проблемы (перенаправление подпапок, замена, RedirectMatch), но, похоже, это не помогло.Вот несколько примеров того, что я пытался

AddOutputFilterByType SUBSTITUTE text/html
AddOutputFilterByType SUBSTITUTE text/css
AddOutputFilterByType SUBSTITUTE text/js

###### attempt
Substitute "s|http://localhost:8081/|http://domain.eu/wp-includes/|i"

###### attempt
Substitute "s|http://localhost:8081/|http://domain.eu/|i"

###### attempt
RedirectMatch ^/$ /wp-includes/

Я даже не уверен, что правильно понимаю, как работают эти правила замещения и как они применяются (регулярное выражение на основе Perl + незнакомые для меня понятия).С Nginx все выглядит так просто.Чего мне не хватает?Как ты справишься с этим?

1 Ответ

0 голосов
/ 11 февраля 2019

Я наконец нашел это.Хитрость заключается в том, чтобы использовать location (не знаю, почему это не сработало)

<VirtualHost *:443>
ServerName new_domain.eu
ProxyPass / http://localhost:8081/

   <Location />
        AddOutputFilterByType SUBSTITUTE text/html
        SetOutputFilter proxy-html
        ProxyPassReverse /
        Substitute "s|http://localhost:8081/|https://new_domain.eu/|i"
        RequestHeader    unset  Accept-Encoding
    </Location>

SSLCertificateFile /etc/letsencrypt/live/new_domain.eu/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/new_domain.eu/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

...