使用Apache ProxyPass处理相对URL

时间:2019-02-03 16:40:03

标签: wordpress apache proxy reverse-proxy relative-path

我花了两个晚上试图解决此问题。我使用 Apache 2.4 作为代理,将连接重定向到我的 docker容器(一个简单的wordpress,没什么花哨的)上,监听端口8081

该配置文件有效:

<VirtualHost *:80>
    ServerName domain.eu

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

但是,内部网址(css文件,js,内联href)无效。这是

的示例

根据我的阅读,这是经典的,在this post中已指出。但是,我尝试了几种已知的方法解决此问题(重定向子文件夹,Substitute,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的正则表达式+不熟悉的概念)。事情似乎so easy with Nginx。我想念什么?您如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

我终于找到了。诀窍是使用 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