je suis en train de configurer nginx pour pouvoir transmettre la requête à un autre serveur, que si la variable request_body de $ correspond à une expression régulière spécifique.
Mon problème est maintenant, que je ne sais pas comment configurer ce comportement exactement.
Je suis actuellement à celui-ci:
server {
listen 80 default;
server_name test.local;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_Host;
if ($request_body ~* ^(.*)\.test) {
proxy_pass http://www.google.de;
}
root /srv/http;
}
}
mais le problème est ici, cette racine a toujours le upperhand. le proxy ne sera pas passé de toute façon.
une idée sur la façon dont je pourrais y arriver?
merci d'avance
essaye ça:
server {
listen 80 default;
server_name test.local;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_Host;
if ($request_body ~* ^(.*)\.test) {
proxy_pass http://www.google.de;
break;
}
root /srv/http;
}
}
Le routage Nginx est basé sur la directive location qui correspond à l'URI de la demande. La solution consiste à le modifier temporairement afin de transmettre la demande à différents points de terminaison.
server {
listen 80 default;
server_name test.local;
if ($request_body ~* ^(.*)\.test) {
rewrite ^(.*)$ /istest/$1;
}
location / {
root /srv/http;
}
location /istest/ {
rewrite ^/istest/(.*)$ $1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_Host;
proxy_pass http://www.google.de;
}
}
La condition if
ne peut être utilisée en toute sécurité dans Nginx qu'avec le module rewrite dont elle fait partie. Dans cet exemple rewrite
préfixe l'URI de la requête avec istest
.
Les blocs location
donnent la priorité à la correspondance la plus proche. Tout ce qui correspond à /istest/
ira au deuxième bloc qui utilise une autre rewrite
pour supprimer /istest/
de l'URI de la demande avant de le transférer au proxy en amont.