J'ai les API suivantes:
Je voudrais utiliser NGINX pour les exécuter tous sous l'emplacement suivant:
localhost: 443/api /
Cela semble très difficile car les clients s'étendent sur deux serveurs.
Voici ma tentative ratée en commençant par les commandes
server {
listen 443;
server_name localhost;
location /api/orders {
proxy_pass https://localhost:500/api/orders;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 443;
server_name localhost;
location /api/customers/$id/billing {
proxy_pass https://localhost:400/api/customers/$id/billing;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 443;
server_name localhost;
location /api/customers {
proxy_pass https://localhost:300/api/customers;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
Quelque chose saute aussi loin qu'une solution? Merci!
Les trois services sont mandatés par le même serveur (en ce qui concerne nginx
) et doivent donc être structurés en trois blocs location
dans un bloc server
. Voir ce document pour plus de détails.
Si vous passez simplement l'URI d'origine non modifié, vous n'avez pas besoin de spécifier un URI sur l'instruction proxy_pass
.
server {
{
listen 443;
server_name localhost;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
location /api/orders {
proxy_pass https://localhost:500;
}
location /api/customers {
proxy_pass https://localhost:400;
}
location = /api/customers {
proxy_pass https://localhost:300;
}
}
Si les instructions proxy_set_header
Sont identiques, elles peuvent être spécifiées une fois dans le bloc parent.
Le type d'instruction location
requis dépend de la plage d'URI traités par le service localhost:300/api/customers/
. S'il s'agit d'un seul URI, la syntaxe =
Fonctionnera. S'il s'agit d'un URI qui ne correspond pas à /api/customers/:id/billing
, Vous devrez utiliser un bloc d'emplacement d'expression régulière. Voir ce document pour plus de détails.
Je ne suis pas sûr que cela fonctionnera sauf si vous résiliez SSL ici. C'est-à-dire configurer le proxy inverse en tant que serveur sécurisé .
La réponse acceptée n'a pas fonctionné pour moi; J'avais trois serveurs fonctionnant en tant que service Kubernetes mappés à différentes adresses IP de cluster (accessibles uniquement à partir des nœuds Kubernetes). J'ai donc utilisé l'IP de la machine hôte - 10.ttt.ttt.104
et la configuration suivante pour pouvoir accéder à ces services depuis mon réseau professionnel.
Je ne suis pas un expert nginx de quelque longueur que ce soit - mais cela a fonctionné - alors utilisez-le comme base peut-être
events {
worker_connections 4096; ## Default: 1024
}
http{
server {
listen 80;
listen [::]:80;
server_name 10.ttt.ttt.104;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://10.103.152.188:80/;
}
}
server {
listen 9090;
listen [::]:9090;
server_name 10.ttt.ttt.104;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://10.107.115.44:9091/;
}
}
server {
listen 8080;
listen [::]:8080;
server_name 10.ttt.ttt.104;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://10.105.249.237:80/;
}
}
}