Gibt es in Nginx eine Möglichkeit, eine im Standort angegebene Route aus einer Domäne und einem Port zu entfernen und an einen Reverse-Proxy weiterzuleiten?

Gibt es in Nginx eine Möglichkeit, eine im Standort angegebene Route aus einer Domäne und einem Port zu entfernen und an einen Reverse-Proxy weiterzuleiten?

Ich möchte mich verbindenbeispiel.com:80Undbeispiel.com:82zu einer bestimmten Site über Reverse-Proxy.

localhost/api/kaufen/ ->http://example.com:80/

localhost/api/verkaufen/ ->http://example.com:82/

Ich habe die Konfigurationsdatei wie unten eingerichtet.

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;
            }

}

Aber wenn ich /api/buy und /api/sell verbinde, erhalte ich die Fehlermeldung „404 nicht gefunden“.

Unten sehen Sie den Inhalt der Datei 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"

Bei Verwendung eines anderen Ports habe ich bestätigt, dass die Einstellung gut funktioniert.

Ich möchte es auf denselben Port einstellen, aber gibt es eine andere Möglichkeit?

Antwort1

Der beste Weg ist, sich zu ändernProxy-Passworthttp://example.com:80/Zu Proxy-Passworthttp://example.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;
        }

verwandte Informationen