Estou tentando configurar um proxy reverso para um aplicativo que estou construindo. O aplicativo é dividido em duas imagens docker. A primeira é uma interface de usuário da web, que pode ser acessada via https://example.com/
A segunda imagem docker tem endereços base nos quais estou interessado. A primeira é https://example.com/swagger e a segunda é https://example.com/api
Quando navego para example.com, tudo funciona conforme o esperado. Eu recebo o front-end do aplicativo. Quando navego para o link do swagger, novamente tudo está funcionando bem, recebo a página do swagger. o endereço real é https://example.com/swagger/index.html
No entanto, a terceira parte disso é que https://example.com/api é uma API Rest que desejo acessar, quando tento fazer uma chamada para isso. Ou, mais especificamente, uma solicitação POST para https://example.com/api/Authentication/login
Recebo uma resposta 307 do servidor que redireciona a chamada para http://actualserver.local:7066/api/Authentication/login
Não entendo por que está fazendo isso, pois deveria estar obtendo as informações da mesma forma que o link de arrogância está fazendo.
Aqui está meu arquivo nginx.conf que estou usando para executar o proxy reverso
worker_processes 1;
events { worker_connections 1024; }
http {
client_max_body_size 0;
sendfile on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
server {
listen 80 default_server;
server_name example.com;
# location /.well-known/acme-challenge/ {
# root /var/www/certbot;
# }
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
server_name example.com;
location /api {
proxy_pass http://actualserver.local:7066/api;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
location /swagger {
proxy_pass http://actualserver.local:7066/swagger;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
location / {
proxy_pass http://actualserver.local:3000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
}
}
O que estou procurando é fazer com que o proxy reverso faça a chamada para actualserver.local, em vez de retornar um 307. Estou um pouco perdido aqui, então qualquer ajuda seria apreciada.
atualização: tentei modificar a configuração do nginx para ver se isso tem algum efeito. Aqui está o meu arquivo atualizado.
trabalhador_processos 1;
eventos { worker_connections 1024; }
http { client_max_body_size 0; enviar arquivo em;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
upstream web-ui {
server actualserver.local:3000;
}
upstream web-api {
server actualserver.local:7066;
}
server {
listen 80 default_server;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
server_name example.com;
location /api {
proxy_pass http://web-api/api;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
location /swagger {
proxy_pass http://web-api/swagger;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
location / {
proxy_pass http://web-ui;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
}
}
A localização relatada no 307 é
https://web-api:7066/api/Authentication/login
O único local onde existe web-api em toda a base de código é nginx.conf, não pode ser do servidor de aplicativos. Tem que ser o nginx que está fazendo isso.