#nginx proxy_pass an URI to another server with a different URI

By | August 22, 2017

Nginx can be used very nicely to aggregate resources after the same fronted by using it as a proxy.

I want my set-up to be like:
URL1: https://blog.voina.org -> nas1 hosted wordpress
URL2: https://blog.voina.org/store -> nas2 hosted store with URL https://nas/store
URL3: https://blog.voina.org/doc -> nas4 hosted wiki with URL https://nas4/wiki

How can we do this using location and proxy_pass directives in nginx ? There is a nice post in the nginx wiki but was still confusing to me without examples.

This is the default case all requests are directed to the wordpress on the local nas1 machine where nginx runs.

This is the simple case:

In this case the full URI that is matched by the rule will be passed as it is to the proxy_pass directive.
So https://blog.voina.org/store/cart –> https://nas2/store/cart

This is the most complicated case. Here we have a redirection (with a regex) but also an URI change.
We try first:

In this case the same as in case of URI2, the URI that is matched by the rule will be passed as it is to the proxy_pass directive.
This means that using this rule we have:
https://blog.voina.org/docs/index –> https://nas4/docs/index

But this is not OK for us, so we need a rewrite rule to replace the client called URI with the URI front on our nas4 machine.

Putting all together we have:

This means that using the final rule we have:
https://blog.voina.org/docs/index –> https://nas4/wiki/index


Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.