【发布时间】:2021-12-30 00:16:51
【问题描述】:
我在 Ubuntu 服务器(使用 Nginx)上部署了三个 .NET 5 Web 应用程序(1 个 Razor 页面、1 个 MVC、1 个 Web API),我希望它们的路径像这样工作:
..但我在提供静态文件时遇到了几个问题(到目前为止在 MVC 应用程序上)
平台应用配置
程序.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
webBuilder.UseUrls("http://localhost:8002");
webBuilder.UseStartup<Startup>();
});
Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseStaticFiles();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
app.UseStaticFiles("/platform");
app.UsePathBase("/platform");
}
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
nginx 配置
server {
listen 80;
server_name domain.azure.com *.domain.azure.com;
location /homepage/ {
proxy_pass http://127.0.0.1:8001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /platform/ {
proxy_pass http://127.0.0.1:8002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /apis/ {
proxy_pass http://127.0.0.1:8003;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
我对 MVC 应用程序上的静态文件有两个问题:
问题 1
当操作是索引时,例如/administration,服务器正确加载图片如下:domain.azure.com/platform/assets/images/header.png
但是当试图访问控制器中不是索引的动作时(例如/administration/users),服务器会尝试像domain.azure.com/platform/administration/assets/images/header.png那样加载背景图像。
问题 2
另一个问题是我在 MVC 应用程序上的 Identity Razor 页面,其中服务器忽略 platform 路径并尝试从域相对 URL 提供页面,例如domain.azure.com/Identity/Account/Login 而不是 domain.azure.com/platform/Identity/Account/Login
你能告诉我我的配置是否遗漏了什么吗?
谢谢
【问题讨论】:
-
嗨。你能解决这个问题吗?我面临着完全相同的问题。谢谢。
-
嗨,事实证明我的设置是正确的,但我在链接引用上遇到了一些问题。我通过在我的视图和 css 文件中使用相对 url 来修复静态文件问题,如下所示: background-image: url(../assets/images/image.jpg) 或 ~/assets/images/logo.png (取决于在您的情况下).. 以及对于剃须刀页面,我使用了这样的网址:“~/Identity/Account/Login”。
-
是的,完全正确:D 我用同样的方法修复了。此外,还需要添加 UsePathBase 中间件。我将发布解决方案以供以后使用:)
标签: c# asp.net-mvc asp.net-core nginx razor-pages