Ich versuche, NGINX Resolver den DNS-Auflösung-Cache automatisch zu aktualisieren, so bin ich Übergang zu einer Variable als proxy_pass
Wert, um das zu erreichen. Wenn ich jedoch eine Variable verwende, werden alle Anfragen an den Root-Endpunkt der Anfrage gesendet und alle zusätzlichen Pfade der URL abgeschnitten. Hier ist meine config:NGINX - Verwenden von Variable in Proxy-Pass bricht Routing
resolver 10.0.0.2 valid=10s;
server {
listen 80;
server_name localhost;
location /api/test-service/ {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# If these 2 lines are uncommented, 'http://example.com/api/test-service/test' goes to 'http://example.com/api/test-service/'
set $pass_url http://test-microservice.example.com:80/;
proxy_pass $pass_url;
# If this line is uncommented, things work as expected. 'http://example.com/api/test-service/test' goes to 'http://example.com/api/test-service/test'
# proxy_pass http://test-microservice.example.com:80/;
}
Dieser keinen Sinn für mich macht, weil die URL fest codierten und der Wert der Variablen identisch sind. Gibt es etwas, das mir fehlt?
EDIT: Ah, also habe ich das Problem gefunden. Aber ich bin mir nicht ganz sicher, wie ich damit umgehen soll. Da dies ein Reverse-Proxy ist, brauche ich die proxy_pass
, um die /api/test-service/
aus dem URI zu entfernen, bevor es an den Proxy übergeben wird. Also ..
Dieses:
http://example.com/api/test-service/test
Should Proxy dazu:
http://test-microservice.example.com:80/test
Aber statt Proxies dies:
http://test-microservice.example.com:80/api/test-service/test
Wenn ich nicht über eine Variable, Es fällt kein Problem. Aber die Variable fügt es hinzu. Ist das nur inhärent, was die Verwendung der Variable tun wird?