Définit l'en-tête dans apache s'il n'existe pas déjà

13

J'ai un proxy qui injecte des en-têtes mais je veux le modifier pour qu'il ne définisse les en-têtes que s'ils ne sont pas déjà présents:

<Location /api>    
    RequestHeader set MY_HEADER "value"

    ProxyPass http://127.0.0.1:8000/api
    ProxypassReverse http://127.0.0.1:8000/api
</Location>

Est-ce possible?

Hobozilla
la source

Réponses:

5

Dans Apache 2.4.7, x86_64, Ubuntu 14.04 LTS

J'ai trouvé que cela fonctionne

RequestHeader setIfEmpty X-Forwarded-For "127.0.0.1"

fonctionne toute la journée. Cependant, si l'on essaie d'utiliser une valeur dynamique,

RequestHeader setIfEmpty X-Forwarded-For "%{REMOTE_ADDR}e"

ne marche pas. J'ai trouvé que vous avez besoin de l'aide de mod_rewrite pour récolter la valeur. Ma configuration ressemble maintenant à ceci, et cela fonctionne.

RewriteRule . - [E=noxff:%{REMOTE_ADDR}] RequestHeader setIfEmpty X-Forwarded-For "%{noxff}e"

Je sais que c'est stupide, mais ça marche.

Mauro Marzorati
la source
7

Que diriez-vous de quelque chose comme:

RequestHeader set X-My-Header "value" expr="req('X-My-Header')==''"

Consultez http://httpd.apache.org/docs/current/expr.html pour plus d'informations sur la syntaxe expr =.

Edit: Dans Apache 2.2, vous devriez pouvoir faire ceci:

SetEnvIf X-My-Header "" no_my_header
RequestHeader set X-My-Header "value" env=no_my_header
MLu
la source
Il me semble que j'ai des problèmes avec cela dans Apache 2.2.24. Est-ce juste une chose 2.4?
Hobozilla
Ne semble pas exister dans Apache 2.2.
Michael Hampton
Voir mes modifications ci-dessus pour Apache 2.2.
MLu
2
Pour une raison quelconque, il n'aime pas "" comme expression régulière mais ^ $ semble faire l'affaire.
Hobozilla
4

Apache 2.4.7

Header setifempty Access-Control-Allow-Origin "*"

Apache 2.2.4 ci-dessous

Header append Access-Control-Allow-Origin ""
Header edit Access-Control-Allow-Origin "^$" "*"
Kangur
la source