2017-11-13 1 views
0

Ich habe haproxy 1.6.3 und ich habe die X-Frame-Origin-Header auf der Front festgelegt. Ich stoße gerade auf die Situation, wenn die Seite in einen iframe geladen wird und der Inhalt wegen dieser Überschrift blockiert wird. Ich habe versucht, eine ACL-Regel eingestellt, die wie folgt aussieht:Header auf anderen Pfad ausschließen

acl is_embeded path_beg /?embeded=1 
http-response set-header x-frame-options "SAMEORIGIN" if !is_embeded 

wenn ich laufe haproxy -f /etc/haproxy/haproxy.conf -c ich für die folgende Fehlermeldung:

[WARNING] 316/145915 (23701) : parsing [/etc/haproxy/haproxy.cfg:42] : acl 'is_embeded' will never match because it only involves keywords that are incompatible with 'frontend http-response header rule' 

Gibt es eine Möglichkeit, diese Arbeit zu bekommen?

Antwort

0

Weil Sie eine Anfrage acl in der Antwortstufe verwenden.

Sie müssen stroe die URL wie folgt aus:

http-request set-var(txn.urlEmbeded) url 
acl is_embeded var(txn.urlEmbeded) -m beg /?embeded=1 
http-response set-header x-frame-options "SAMEORIGIN" if !is_embeded 

auch verwenden Sie Pfad, ist es nicht die Abfrage enthalten. Möglicherweise müssen Sie url oder query (eingebettet) mit Methode verwenden. Du hast die Idee.

1

Es gibt tatsächlich zwei Probleme mit dem, was Sie tun.

Zuerst ist der Abruf path nur während der Anfrageverarbeitung verfügbar - nicht als Antwortverarbeitung. Dies ist der Grund für die Warnung. Der path ist kein eigener Puffer zugeordnet - der Abruf extrahiert ihn nur aus dem Puffer für ausstehende Anforderungen, wenn er ausgewertet wird, und dieser Puffer für ausstehende Anforderungen wird freigegeben, sobald die Anforderung an den Server gesendet wurde.

Zweitens ist alles beginnend mit ?nicht Teil des Pfades. Das ist die Abfragezeichenfolge.

Die capture.req.uri ist die richtige Fetch zu verwenden, da es sowohl den Pfad und die Abfragezeichenfolge enthält, und da ein Speicherpuffer für es reserviert ist, bleibt es während der Verarbeitung der Anfrage.

acl is_embeded capture.req.uri -m beg /?embeded=1 

capture.req.uri

This extracts the request's URI, which starts at the first slash and ends before the first space in the request (without the host part). Unlike path and url , it can be used in both request and response because it's allocated.

http://cbonte.github.io/haproxy-dconv/1.6/configuration.html#7.3.6-capture.req.uri

Beachten Sie auch die korrekte Schreibweise für das Wort embedded.

Verwandte Themen