My nginx configuration looks like this
server {
listen 80;
server_name host_server;
location / {
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 /admin/ {
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;
}
}
The /
routing forwards to port 3000 and /admin
routing forwards to port 3001. The first routing seems to work, but the second routing doesnt work. What I noticed is when I switch the two forwarding rules (i.e /
routing forwards to port 3001 and /admin
routing forwards to port 3000) still the /admin
forwarding doesnt work but the other does.
This confirms there is no problem in both the applications but a problem in nginx forwarding. Specifically in the /admin
forwarding.
Thanks in advance
This is the answer I came up with
server {
listen 80;
server_name host_server;
location / {
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 /admin/ {
rewrite ^/admin/(.*) /$1 break;
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;
}
}
The change here is adding the rewrite
block. The rewrite directive is used to strip the /admin/ prefix from the requested URI before passing it to the upstream server specified in the proxy_pass directive. This allows the backend server to handle the request as if it were directly requested without the /admin/ prefix.