WordPress hinter Reverse Proxy

7

Unsere Organisation überarbeitet ihre Website. Jemand hatte eine neue Site auf einem neuen Server eingerichtet. Sie können darauf zugreifen, nachdem Sie einen Eintrag in / etc / hosts eingegeben haben. Und funktioniert perfekt, wenn auf diese Weise zugegriffen wird.

Aber da die meisten Beteiligten nicht gut mit Computern umgehen können, habe ich beschlossen, einen Reverse-Proxy einzurichten.

Ich habe weder Zugriff auf die Site noch auf den Server, auf dem sie gehostet wird. Ich habe dort ein Editor-Konto in Wordpress installiert.

Ich habe einen Eintrag in / etc / hosts meines privaten Servers eingefügt und den Reverse Proxy mit der folgenden Konfiguration eingerichtet. Auf meinem Server wird Apache-2.2 unter Debian Stable ausgeführt:

<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>

Fast alles funktioniert. Ich kann keine neuen Beiträge erstellen (der Texteditor wird nicht richtig geladen). Im Entwicklermodus von Iceweasel (Firefox) heißt es:

(...)
[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]

Ich habe keine Fehler ausgelassen. Es scheint mir, dass Apache etwas nicht umschreibt. Irgendwelche Ideen?

Luchs
quelle

Antworten:

2

Hier meine Arbeitskonfiguration für Ihren Fall.

<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>

Einige Erklärungen

  • Ich muss einstellen, ProxyHTMLLinksweil es unten im Apache-Protokoll einige Fehler gibt. Die Konfiguration wurde aus diesem Blog-Beitrag herausgerissen .

    [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] Keine Links konfiguriert: Für den Proxy-HTML-Filter ist nichts zu tun

  • Parameter RequestHeader unset Accept-Encodingwurde verwendet, um Parameter zu ersetzen SetOutputFilter INFLATE;proxy-html;DEFLATE. Der Effekt ist, dass der Datenverkehr zwischen Proxy und echtem WordPress nicht komprimiert wurde. Einzelheiten finden Sie auf dieser Seite .

  • Die URL wp-admin/admin-ajax.phpwurde per Javascript definiert und aufgerufen. Parameter ProxyHTMLExtended Onsollte diesen Job machen.

  • URL wp-admin/admin-ajax.phpohne Domain definiert (Sie können sie sehen, wenn Sie in Firefox auf Seitenquelle anzeigen klicken). Dieser verursachte Parameter http://site.example.com/ /some/prefix/stimmt nicht mit dieser Zeichenfolge überein. Also habe ich einen neuen Parameter eingestellt

    • ProxyHTMLURLMap /wp-admin/ /some/prefix/wp-admin/ für reguläre Zeichenfolge.
    • ProxyHTMLURLMap \/wp-admin\/ \/some\/prefix\/wp-admin\/ für Escapezeichenfolge.
masegaloeh
quelle
Ich musste "RequestHeader unset Accept-Encoding" auskommentieren und "ProxyHTMLEnable On" durch "SetOutputFilter INFLATE; proxy-html; DEFLATE" ersetzen. Weil Apache sich über die Syntax beschwerte. Die auf diese Weise modifizierte Lösung funktioniert fast einwandfrei. Einige Bilder funktionieren nicht. Meine Organisation verwendet jetzt die neue Site, sodass der Reverse-Proxy nicht mehr benötigt wird. Danke für die Hilfe.
Luchs
1
Wow das ist eine wirklich gute Sache, ich hatte keine Ahnung, dass das möglich sein würde
deFreitas
Ich weiß, dass dies alt ist, aber es wäre hilfreich zu wissen, für welche Wordpress-Version dies war!
August