3

I want to handle 2 cases: test.example.com and test.example.com/ABC.

  1. If the entered url is the base domain (test.example.com), I want to proxy_pass a given endpoint (Let's say example.com/home).

  2. If test.example.com/ABC is given, I want to proxy_pass to example.com/confirm/ABC

I made the (1) work like so:

server {
     listen 443 ssl;
     listen [::]:443 ssl;

     server_name test.example.com;

     location / {
         proxy_pass https://example.com/home;
     }
}

But I couldn't figure out how to say "If $request_uri exists, proxy_pass to different endpoint". I tried:

location / {
    if ($request_uri) {
       proxy_pass https://example.com/confirm/$request_uri;
    }
 
    proxy_pass https://example.com/home;
}

How can I achieve this?

1 Answer 1

3

$request_uri always exists and is never empty. The URI for the root of your domain is a single / (even if it's not displayed in the browser's address bar).

The location block which matches that URI is location = /. See this document for details.

For example:

location = / {
    proxy_pass https://example.com/home;
}
location / {
    proxy_pass https://example.com/confirm/;
}

The first location block only matches the root URI /, and the second location block matches any other URI. The remainder of the URI is automatically appended to /confirm/. See this document for details.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.