带有 Nginx 反向代理的 ASP NET Core 服务

问题描述 投票:0回答:1

我正在尝试使用 Nginx 反向代理设置一些 ASP NET Core 服务,但一段时间以来我一直遇到同样的问题:让我的服务使用原始路径进行重定向。

我有一个名为 ConfigCloud 的服务,应该通过 site.net/api/configcloud 访问。访问服务工作正常,但每当我的服务执行重定向或将 Url 发送到另一个服务时,它永远不会包含 /api/configcloud 前缀,这会阻止该服务可用。

在身份验证和授权方面,这非常令人头痛,因为这些过程涉及重定向和回调。例如,site.net/api/configcloud/account/profile会将用户重定向到site.net/account/login,这是不可取的。另外,当我的身份验证提供商(Auth0)想要发送回调时,它将发送回 site.net/callback 而不是 site.net/api/configcloud/callback

我尝试了许多不同的 Kestrel 和 Nginx 配置来使其正常工作,包括 Microsoft 建议的配置(Link 1Link 2)。

我很难确定问题出在我的 Kestrel 配置还是 Nginx 配置上。

最初,我以为这就是这个问题的答案,但这似乎没有任何效果。

环境:

  • ASP.NET Core 7
  • Nginx 最新
  • 通过 WSL 2 Docker Compose

当前 Nginx 配置:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    
    server_name localhost site.net;
    
    ssl_certificate         /etc/letsencrypt/live/site.net/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/site.net/privkey.pem;
        
    # Increase client upload size.
    client_max_body_size 10M;
    
    # Reuse ssl sessions, avoids unnecessary handshakes.
    ssl_session_tickets on;

    location /api/configcloud/ {
        proxy_pass          https://aurora-configcloud/;
        proxy_set_header    Host $host;
        proxy_set_header    Upgrade $http_upgrade;
        proxy_set_header    Connection $http_connection;
        proxy_set_header    Referer $http_referer;

        # I'm sure some of these are unnecessary but I've just been trying everything.
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Real-Port $remote_port;
        proxy_set_header    X-Forwarded-Server $host;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto $scheme;
        proxy_set_header    X-Forwarded-Host $host:$remote_port;
    }

    # Other services

我将不胜感激有关此事的任何帮助,因为它已成为尝试学习后端 Web 开发的相当大的障碍。谢谢你。

编辑: 我找到了一个可行的解决方案。必须将以下代码添加到我的 ASP.NET Core 程序中。

  app.Use((httpContext, next) =>
  {
      httpContext.Request.PathBase = pathBase;
      return next();
  });

上面的代码可以像您期望的基本 URL 在其他环境中一样工作,这与 ASP NET Core 的 UsePathBase 不同。

asp.net asp.net-core nginx reverse-proxy nginx-reverse-proxy
1个回答
0
投票

我找到了一个可行的解决方案。必须将以下代码添加到 ASP.NET Core 程序中。

  app.Use((httpContext, next) =>
  {
      httpContext.Request.PathBase = pathBase;
      return next();
  });
© www.soinside.com 2019 - 2024. All rights reserved.