Score:0

proxy pass/redirect not working on Nginx reverse proxy

in flag

I am trying to achieve the below with nginx -

I have 2 docker containers running on a server once container runs nginx on port 80 & takes requests from AWS application load balancer. Then based on the path in the URL, it is supposed to redirect to one of 3 ports on the other docker container. The applications running in the second docker container serve content on their own paths.

Example - When I type https://example.com/story/fairy, Nginx is supposed to parse /story/fairy & pass it to the other docker container on port 9091. The returned data from the app may be on path /_myownpath/page1/. The browser URL at the end of it should look - https://example.com/story/fairy/_myownpath/page1.

Then if there are other links on this returned page & the user clicks on them, nginx should pass just the new path to the app listening on port 9091 & say the new content returned will be on path /_newpath/story_page_11. The browser URL should now look https://example.com/story/fairy/_newpath/story_page_11 & so on.

I've pulled my hairs apart playing with nginx config & haven't been able to get my head around and get this right.

Some of the configs I've tried are

Tried proxy pass

server {
        listen 80;
        server_name example.com;
    
        location /story/fairy/ {
            # Reject requests with unsupported HTTP method
            if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE)$) {
                return 405;
            }
    
            # Only requests matching the whitelist expectations will
            # get sent to the application server
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://localhost:9091/;
            proxy_redirect http://localhost:9091/ https://$server_name/;
        }
}

Tried redirecting

server {
    listen 80;

    location /awsmap/dev/ {
        if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE)$) {
            return 405;
        }

        return 301 http://localhost:9091/;
    }

Tried re-writing

server {
    listen 80;

    location /story/fairy {
        rewrite ^/story(.*)$ / break;

        proxy_pass http://localhost:9091;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;

        absolute_redirect off;
    }

    location ^~ /story\/fairy/ {
    rewrite ^/story(.*)$ / break;

        proxy_pass http://localhost:9091;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;

        absolute_redirect off;
    }

}

I've got very little experience with nginx. Stuck at this point getting this to work.

I'd truly appreciate ay help to get this working please.

I sit in a Tesla and translated this thread with Ai:

mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.