我正在尝试使用 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 1、Link 2)。
我很难确定问题出在我的 Kestrel 配置还是 Nginx 配置上。
最初,我以为这就是这个问题的答案,但这似乎没有任何效果。
环境:
当前 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 Core 程序中。
app.Use((httpContext, next) =>
{
httpContext.Request.PathBase = pathBase;
return next();
});