¿Hay alguna forma en Nginx de eliminar una ruta especificada en la ubicación de un dominio y puerto y reenviarla al proxy inverso?

¿Hay alguna forma en Nginx de eliminar una ruta especificada en la ubicación de un dominio y puerto y reenviarla al proxy inverso?

quiero conectarmeejemplo.com:80yejemplo.com:82a un sitio específico a través de proxy inverso.

localhost/api/comprar/ ->http://ejemplo.com:80/

localhost/api/vender/ ->http://ejemplo.com:82/

Configuré el archivo de configuración como se muestra a continuación.

server {
    listen       80;
    server_name  localhost;



    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
    }


    location = /api/buy {
    return 302 /api/buy/;
    }

        location /api/buy/ {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header HOST $host;
            proxy_set_header X-NginX-Proxy true;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_pass http://example.com:80/;
            proxy_redirect off;
            }

    location = /api/sell {
    return 302 /api/sell/;
    }

        location /api/sell/ {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header HOST $host;
            proxy_set_header X-NginX-Proxy true;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_pass http://example.com:82/;
            proxy_redirect off;
            }

}

Pero si conecto /api/buy y /api/sell, aparece un error 404 no encontrado.

A continuación se muestra el contenido del archivo error.log.

connect() failed (10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /api/ HTTP/1.1", upstream: "http://example.com/api/buy/", host: "localhost"

Al utilizar un puerto diferente, confirmé que la configuración funciona bien.

Quiero configurarlo en el mismo puerto, pero ¿hay alguna manera?

Respuesta1

la mejor manera es cambiarcontraseña_proxyhttp://ejemplo.com:80/a contraseña_proxyhttp://ejemplo.com:80/api/buy/

location = /api/buy {
return 302 /api/buy/;
}

    location /api/buy/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $host;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://example.com:80/api/buy/;
        proxy_redirect off;
        }

información relacionada