nginx 反向代理触发307重定向背后的asp.netcore

ibrsph3r  于 2023-06-21  发布在  Nginx
关注(0)|答案(1)|浏览(334)

我正在一个docker容器中部署一个ASP.NETCORE web API。通过提供SSL层的反向代理访问应用程序,并将来自面向互联网的IP的呼叫路由到无法从Web访问的机器。

域名-> ReverseProxy -> ASPNetCoreWebApi
代理已经启动并运行,这里是nginx.conf文件,供那些想要查看所有细节的人使用。
我更改了服务器名称,原因显而易见。example.com是面向Internet的域,actualserver.local位于防火墙后面。

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

webapi应用程序是使用docker-compose部署的,这是文件的相关部分。
API:image:myprivateregistry.com/bcb.api:1.0.0.19 restart:always ports:- 7066:80环境:SQL_SERVER:本地主机MAIL_SERVER:127.0.01
当我浏览到https://example.com时,我从actualserver.local:3000中获取内容,这是一个react应用程序,它工作得很好。
当我浏览到https://example.com/swagger/index.html时,我从我的web应用程序中得到了swagger链接,所以这表明上面的/swagger位置工作得很好,它表明代理正在将请求直接转发到ASP.netcore应用程序。
但是,当我尝试对https://example.com/api/Authentication/login进行rest调用而不是像其他人那样处理调用并发送回响应时,ASP.NETCORE应用程序似乎拦截了该调用并使用http状态307进行响应,从而给出了https://actualserver.local:7066/api/Authentication/login的位置
当然,呼叫失败了。
有谁能告诉我如何阻止ASP.NETCore应用程序尝试重定向调用,并简单地接受请求并处理它,就像我在调试模式下运行而不使用代理一样?
我试过使用swagger、postman和web浏览器。对应用程序中的各种请求进行请求,所有请求都以307结束。
在我的program.cs中我试着添加

builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders =
        ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;

    options.KnownProxies.Add(IPAddress.Parse("1.2.3.4"));
});

var app = builder.Build();

// Configure the HTTP request pipeline.
app.UseForwardedHeaders();

将ipAddresswww.example.com1.2.3.4的IPexample.com,并更改为actualserver.local的IP地址,但没有任何效果
我加了

app.UseHttpLogging();

这似乎没有向Docker日志报告任何东西。
有没有人有任何想法,我可以做什么,以获得从反向代理到web API的请求,实际处理,而不是导致307临时重定向响应?

vaqhlq81

vaqhlq811#

原来根本原因是。。。

app.UseHttpsRedirection();

这似乎并没有导致任何事情发生在从同一个项目提供的 Swagger 的页面。但是关掉它,嘿,马上,它就起作用了!!!

相关问题