Apache Reverse Proxy: JSON in HTML verpackt :(

greystone

Active Member
[gelöst] Apache Reverse Proxy: JSON in HTML verpackt :(

Hallo zusammen,

ich habe hier ein kleines Problem. Ich habe eine Webseite, vor die ich einen Apache als Reverse-Proxy davor geschaltet habe. Der Grund dafür ist, dass
ich eine eigenen Hostnamen für die Seite habe, der beim Benutzer einen SSL-Fehler produziert.(SSL-Zertifikat enthält nicht den Namen der angesprochenen Webseite). Ist ja ganz klar. Der Grund für den Umstand ist, dass ich auch die Anwendung dahinter gebrandet habe. Sprich eigenes Logo, und Design, was der Webserver anzeigt, wenn er unter meiner Domain aufgerufen wird.

Deswegen der Reverse-Proxy, der also mein SSL-Zertifikat enthält und hintenrum den obigen Fehler stillschweigend akzeptiert.

Das Problem ist jetzt, dass das verwendete Apache-Modul mod_proxy_html die AJAX-Requests sprich die JSON-Daten manipuliert, so dass letztlich das JSON in HTML eingebettet wird und demzufolge das clientseitige Javascript mit Fehlern abbricht(JSON: Cannot parse...).

Hier erst mal die Apache Konfiguration:
https://pastebin.com/L88zRUeT

So sehen die JSON-Daten aus:

Mit Reverse-Proxy:

Code:
<html><body><p>{&quot;pager&quot;:&quot;</p><div class="\&quot;navbar" paginator-widget-wrapper>\n  
  <form class="\&quot;form-inline" change-items-per-page-form pull-left action="\&quot;\/quarantine.php
\&quot;" method="\&quot;get\&quot;">\n        <div class="\&quot;input-group" input-group-sm>\n
...

Ohne Reverse-Proxy:

Code:
{"pager":"<div class=\"navbar paginator-widget-wrapper\">\n    <form class=\"form-inline change-items-per-page-form
 pull-left\" action=\"\/quarantine.php\" method=\"get\">\n        <div class=\"input-group input-group-sm
\">\n            <div class=\"form-control-static\">\n                Seite 1 von 29. Eintr\u00e4ge gesamt
: 1416. Eintr\u00e4ge pro Seite:\n         
...

Bisherige Versuche:

  • LocationMatch auf die URL(Geht aber nicht, weil URL-Parameter nicht in den Match einbezogen werden).
  • Idee, JSON-Dokumente irgendwie als Ausnahme zu definieren.(Ich habe noch nicht verstanden, wie das gehen könnte.

Umgebung: Debian 8 / Apache 2.4.10

Zu dem Problem findet man im Internet das ein oder andere. Das Besondere in dem Fall ist, dass die URLs die JSON und normales HTML produzieren hier so vermischt sind.

Habt Ihr eine Idee, wie man da weiterkommen könnte?
 
Last edited by a moderator:
Packe die JSON ordnungsgemäss in passende <script>-Tags, dann läufts auch.

Die Anwendung liegt weit ausserhalb meines Einflussbereiches.

Ansonsten scheinst Du mich missverstanden zu haben. Das ist ein AJAX-Request der JSON-zurückliefern soll. Da hat HTML absolut nix verloren.

---

Ich habe jetzt das Apache-Modul proxy_html komplett rausgeschmissen. Das ändert wohl viel mehr als mir lieb ist.

Die Änderungen, also die Ersetzungen vom versteckten Hostnamen zum Servernamen des Frontendservers habe ich jetzt mit dem Apache Modul substitute erledigt.

Damit läuft es. Das war die notwendige Ergänzung:

Code:
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s/antispam.meinedomain.de/spamschutz.meinedomain.de/i"
 
Last edited by a moderator:
Ansonsten scheinst Du mich missverstanden zu haben. Das ist ein AJAX-Request der JSON-zurückliefern soll. Da hat HTML absolut nix verloren.
Auf Grund der Note in http://httpd.apache.org/docs/2.4/en/mod/mod_proxy_html.html#proxyhtmlenable bin ich nunmal von HTML ausgegangen.


Code:
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s/antispam.meinedomain.de/spamschutz.meinedomain.de/i"
Das ist allerdings wieder falsch und wird erneut Probleme bereiten, denn JSON ist nunmal kein text/html
 
Das ist allerdings wieder falsch und wird erneut Probleme bereiten, denn JSON ist nunmal kein text/html

Da scheinst Du mich schon wieder missverstanden zu haben ;) Die Ersetzungen sollen nicht in den JSON-Daten vorgenommen sondern in den HTML-Seiten. Dass da auch JSON-Daten durchgehen ist mir erst später aufgefallen.

Wenn ich die Ersetzung im JSON haben möchte, dann werde ich wahrscheinlich application/json verwenden.
 
Last edited by a moderator:
Du musst Dich schon entscheiden, entweder Du hast AJAX eingebettet in HTML, dann muss das AJAX aka Javascript auch ordnungsgemäss in <script>-Tags stehen, oder Du hast JSON-Daten, dann müssen diese allerdings auch mit dem korrekten MIME-Type ausgeliefert werden.

Dein aktueller wilder Mix führt zwangsläufig zu unvorhersehbaren Problemen...
 
Back
Top