Skip to main content

nginx config: How to forward to different ports based on URL parameter? [Resolved]

I am new to nginx. Below is what I want:

http://example.com/3000/lorem/ipsum -> http://example.com:3000/lorem/ipsum
http://example.com/3001/lorem/ipsum -> http://example.com:3001/lorem/ipsum
http://example.com/3002/lorem/ipsum -> http://example.com:3002/lorem/ipsum

I have done something so it works but I think there are better ways:

location /3000/ {
    proxy_pass http://localhost:3000/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

location /3001/ {
    proxy_pass http://localhost:3001/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

location /3002/ {
    proxy_pass http://localhost:3002/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

I have read many posts to solve this by using regex but I cannot figure out how exactly the usage.


Question Credit: wdetac
Question Reference
Asked July 11, 2018
Tags: nginx
Posted Under: Network
33 views
2 Answers

Below fixed the problem:

location ~ ^/300(0|1|2) {
    rewrite ^/300(0|1|2)(/?)(.*) /$3 break;
    proxy_pass http://localhost:300$1;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

credit: skitty jelly
Answered July 11, 2018
Your Answer
D:\Adnan\Candoerz\CandoProject\vQA