2011-10-24 5 views
11

sto provando a configurare nginx su proxy per passare la richiesta a un altro server, solo se la variabile $ request_body corrisponde a un'espressione regolare specifica.pass proxy condizionale nginx

Il mio problema ora è che non so come configurare esattamente questo comportamento.

Attualmente sto giù a questo:

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

} 

ma il problema qui è, che la radice ha sempre il sopravvento. il proxy non sarà passato in nessun modo.

qualche idea su come potrei realizzare questo?

grazie in anticipo

+0

Sei sicuro che si desidera verificare '$ request_body' contro regexp? Rallenterà la tua app per x volte Inoltre, vuoi fare 'proxy_pass' o semplicemente' redirect'? – user973254

+0

sì, non ho altra scelta, purtroppo, e ho davvero bisogno di passare il proxy, l'applicazione non può reindirizzare (client xml-rpc) – sharpner

+0

Ma qual è il problema ora? Non funziona? Cosa c'è nei log? – user973254

risposta

15

provare questo:

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

} 
+0

thx man, mi hai risparmiato un sacco di tempo e mal di testa, sono contento che la soluzione sia stata così semplice: D molto apprezzato! – sharpner

+0

np, prego :) – user973254

+0

@sharpner Questo metodo funziona ancora? Non sembra nei miei test. – robbles