2011-10-24 18 views
11

Próbuję skonfigurować Nginx do proxy przekazać żądanie do innego serwera, tylko wtedy, gdy zmienna $ request_body pasuje do określonego wyrażenia regularnego.warunkowe podanie proxy nginx

Mój problem polega teraz na tym, że nie mam sposobu, aby dokładnie skonfigurować to zachowanie.

Obecnie jestem w dół do tego:

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

} 

ale tutaj jest problem, że korzeń ma zawsze upperhand. proxy nie zostanie przekazane w żaden sposób.

jakikolwiek pomysł, w jaki sposób mogę to osiągnąć?

góry dzięki

+0

Czy na pewno chcesz sprawdzić '$ request_body' przeciwko regexp? Spowoduje to spowolnienie Twojej aplikacji xx. Czy chcesz też użyć 'proxy_pass' lub po prostu' przekierowania'? – user973254

+0

tak, nie mam innego wyboru, niestety, i naprawdę muszę przekazać proxy, aplikacja nie może przekierować (klient xml-rpc). – sharpner

+0

Ale jaki jest teraz problem? Nie działa? Co jest w dziennikach? – user973254

Odpowiedz

15

spróbuj tego:

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 człowiek, zaoszczędziłeś mi dużo czasu i bólu głowy, cieszę się, że rozwiązanie było takie proste: D bardzo doceniane! – sharpner

+0

np, nie ma za co :) – user973254

+0

@sharpner Czy ta metoda nadal działa? Nie wydaje się, że w moich testach. – robbles

Powiązane problemy