<div dir="ltr"><div><div><br></div><div>Hi! I am using Nginx 1.12.2 in a large and complex reverse-proxy configuration, with lots of content-rewriting (subs_filter, lua, ...).</div><div><br></div><div>Problem:</div><div><br></div><div>- the client connects to my proxy</div><div>- my proxy forwards the request to the origin</div><div>- the origin responds with a 302:</div><div><br></div><div> "Location: <a href="http://www.foo.com/">http://www.foo.com/</a>" ...or</div><div> "Location: <a href="http://www.bar.com/">http://www.bar.com/</a>" ...or</div><div> "Location: <a href="http://www.baz.com/">http://www.baz.com/</a>"</div><div><br></div><div>...and I have the following dynamic rewriting that I want to perform:</div><div><br></div><div>* <a href="http://foo.com">foo.com</a> -> <a href="http://ding.org">ding.org</a></div><div>* <a href="http://bar.com">bar.com</a> -> <a href="http://dong.org">dong.org</a></div><div>* <a href="http://baz.com">baz.com</a> -> <a href="http://dell.org">dell.org</a></div><div>* ...more?</div><div><br></div><div>So I have the following three (or more) rules:</div><div><br></div><div> http {</div><div> # ...etc</div><div> proxy_redirect ~*^(.*?)\\b{foo\\.com}\\b(.*)$ $<a href="http://1ding.org">1ding.org</a>$2;</div><div> proxy_redirect ~*^(.*?)\\b{bar\\.com}\\b(.*)$ $<a href="http://1dong.org">1dong.org</a>$2;</div><div> proxy_redirect ~*^(.*?)\\b{baz\\.com}\\b(.*)$ $<a href="http://1dell.org">1dell.org</a>$2;</div><div> # ...more?</div><div><br></div><div>...and these work well most of the time.</div><div><br></div><div>However: these do not function as-desired when the origin produces a 302 which mentions two or more *different* rewritable site names:</div><div><br></div><div> "Location: <a href="http://www.foo.com/?next=%2F%2Fcdn.baz.com%2F">http://www.foo.com/?next=%2F%2Fcdn.baz.com%2F</a>" <-- INPUT</div><div><br></div><div>...which I *want* to be rewritten as:</div><div><br></div><div> "Location: <a href="http://www.ding.org/?next=%2F%2Fcdn.dell.org%2F">http://www.ding.org/?next=%2F%2Fcdn.dell.org%2F</a>" <-- WANTED</div><div><br></div><div>...but instead I get:</div><div><br></div><div><div> "Location: <a href="http://www.ding.org/?next=%2F%2Fcdn.baz.com%2F">http://www.ding.org/?next=%2F%2Fcdn.baz.com%2F</a>" <-- ACTUAL</div></div><div><br></div><div>i.e. the location is converted from `<a href="http://foo.com">foo.com</a>` to `<a href="http://ding.org">ding.org</a>`, but no further processing happens to convert `<a href="http://baz.com">baz.com</a>` in this example.</div><div><br></div><div><br></div><div><div>The issue seems to be that `proxy_redirect` stops after executing the first rule that succeeds?</div></div><div><br></div><div>Is this intended behaviour, please?  And is there a way to achieve what I want, e.g. via options-flags or Lua? I am making heavy use of subs_filter, proxy_cookie_domain, etc.  </div><div><br></div><div>I've put one of my Nginx configuration files at <a href="https://gist.github.com/alecmuffett/f5cd8abcf161dbdaffd7a81ed8a088b9">https://gist.github.com/alecmuffett/f5cd8abcf161dbdaffd7a81ed8a088b9</a> if you'd like to see the issue in context.</div></div><div><br></div><div>Thanks!</div><div><br></div><div>    - alec</div><div><br></div>-- <div class="gmail_signature"><a href="http://dropsafe.crypticide.com/aboutalecm" target="_blank">http://dropsafe.crypticide.com/aboutalecm</a><br></div><div class="gmail_signature"><br></div>
</div>