Wordpress por trás do proxy reverso

7

Nossa organização está refazendo o site. Alguém configurou um novo site no novo servidor. Pode ser acessado depois de colocar uma entrada em / etc / hosts. E funciona perfeitamente quando acessado dessa maneira.

Mas como a maioria das pessoas envolvidas não é boa com computadores, decidi configurar um proxy reverso.

Eu não tenho acesso ao site nem ao servidor que o hospeda. Eu tenho uma conta de editor no Wordpress instalada lá.

Eu coloquei uma entrada em / etc / hosts do meu servidor privado e configurei o proxy reverso com a seguinte configuração, meu servidor está executando o apache-2.2 no Debian estável:

<VirtualHost *:80>
    ServerName xxx.xxx.xxx.xxx
    ProxyRequests off
    ProxyPass /some/prefix/ http://site.example.com/
    ProxyPassReverse /some/prefix/ http://site.example.com/
    ProxyHTMLURLMap http://site.example.com/ http://xxx.xxx.xxx.xxx/some/prefix/
    <Location /some/prefix/>
            SetOutputFilter INFLATE;proxy-html;DEFLATE
            ProxyHTMLURLMap  http://site.example.com/ /some/prefix/
    </Location>
    ProxyPassReverseCookieDomain site.example.com xxx.xxx.xxx.xxx
    ProxyPassReverseCookiePath / /some/prefix/
    ProxyHTMLExtended On
</VirtualHost>

Quase tudo funciona. Não consigo criar novas postagens (o editor de texto não é carregado corretamente). O modo de desenvolvedor do Iceweasel (Firefox) diz:

(...)
[00:13:33.365] GET http://xxx.xxx.xxx.xxx/some/prefix/wp-includes/js/tinymce/langs/pl.js?wp-mce-4107-20141130 [HTTP/1.1 404 Not Found 399ms]
(...)
[00:13:33.648] Failed to load: http://xxx.xxx.xxx.xxx/some/prefix/wp-includes/js/tinymce/langs/pl.js
[00:13:46.733] POST http://xxx.xxx.xxx.xxx/wp-admin/admin-ajax.php [HTTP/1.1 404 Not Found 102ms]

Eu omiti os erros não. Parece-me que o Apache não está reescrevendo alguma coisa. Alguma idéia?

    
por lynx 21.12.2014 / 00:49

1 resposta

2

Aqui minha configuração de trabalho para o seu caso.

<VirtualHost *:80>
    ServerName proxy.example.net
    ProxyRequests off
    ProxyPass /some/prefix/ http://backend.example.net/
    ProxyPassReverse /some/prefix/ http://backend.example.net/

    <Location /some/prefix/>
            ProxyHTMLEnable On
            ProxyHTMLExtended On

            ProxyHTMLLinks  a               href
            ProxyHTMLLinks  area            href
            ProxyHTMLLinks  link            href
            ProxyHTMLLinks  img             src longdesc usemap
            ProxyHTMLLinks  object          classid codebase data usemap
            ProxyHTMLLinks  q               cite
            ProxyHTMLLinks  blockquote      cite
            ProxyHTMLLinks  ins             cite
            ProxyHTMLLinks  del             cite
            ProxyHTMLLinks  form            action
            ProxyHTMLLinks  input           src usemap
            ProxyHTMLLinks  head            profile
            ProxyHTMLLinks  base            href
            ProxyHTMLLinks  script          src for
            ProxyHTMLLinks  iframe          src

            RequestHeader    unset  Accept-Encoding

            ProxyHTMLURLMap  /wp-admin/  /some/prefix/wp-admin/
            ProxyHTMLURLMap  \/wp-admin\/ \/some\/prefix\/wp-admin\/
            ProxyHTMLURLMap  http://backend.example.net/ http://proxy.example.net/some/prefix/
    </Location>
    ProxyPassReverseCookieDomain backend.example.net proxy.example.net
    ProxyPassReverseCookiePath / /some/prefix/

#    LogLevel warn proxy_html:trace3
    ErrorLog ${APACHE_LOG_DIR}/errorprox.log
    CustomLog ${APACHE_LOG_DIR}/accessprox.log combined

</VirtualHost>

Algumas explicações

  • Eu tenho que definir ProxyHTMLLinks porque há alguns erros no log do apache abaixo. A configuração foi extraída de esta postagem do blog .

    [Sun Dec 21 23:02:49.053825 2014] [proxy_html:trace1] [pid 3368:tid 140385487116032] mod_proxy_html.c(823): [client 36.71.243.192:56711] No links configured: nothing for proxy-html filter to do

  • O parâmetro RequestHeader unset Accept-Encoding foi usado para substituir o parâmetro SetOutputFilter INFLATE;proxy-html;DEFLATE . O efeito é o tráfego entre proxy e wordpress real não foi compactado. Consulte esta página para detalhes.

  • O URL wp-admin/admin-ajax.php foi definido e chamado pelo javascript. O parâmetro ProxyHTMLExtended On deve fazer este trabalho.

  • URL wp-admin/admin-ajax.php definido sem domínio (você pode vê-lo quando clicado em Exibir código de página no Firefox). Isso fez com que o parâmetro http://site.example.com/ /some/prefix/ não correspondesse a essa string. Então, eu defini novo parâmetro

    • ProxyHTMLURLMap /wp-admin/ /some/prefix/wp-admin/ para string normal.
    • ProxyHTMLURLMap \/wp-admin\/ \/some\/prefix\/wp-admin\/ para string de escape.
por 22.12.2014 / 05:52