此答案:https://stackoverflow.com/a/10469032/3958875表示如果应用程序位于虚拟目录中,则URL中的~/
将被设置为应用程序的实际根目录。
但是,我似乎找不到如何设置此路径/值的方法。
例如,我在nginx反向代理后面有该应用程序,因此该应用程序的根目录位于:www.mywebsite.com/app1/
因此,我希望将所有~/
扩展为app1/
。我该怎么做?
我在app.UsePathBase("/app1");
的{{1}}方法中尝试了Configure
,但似乎没有做任何事情。
我的nginx配置就像:
Startup.cs
我是否缺少可以从nginx传递到asp.net的内容?
答案 0 :(得分:1)
~
将扩展到内容根。这实际上是为传入请求配置的路径库。
app.UsePathBase()
的作用是告诉应用程序何时传入请求以指定的前缀开头,然后将其用作路径基础。因此,在您的情况下,当传入请求以/app1
开头时,则/app1
将成为路径基础,并且~
将被扩展为/app1
。
如果查看反向代理配置,则可以看到路径/app1
实际上没有传递给应用程序:
location /app1/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:5000/;
}
因此,当您访问/app1/foo
处的页面时,传递给应用程序的请求路径将仅为/foo
。因此,应用程序无法看到/app1
路径库,因此无法正确响应。
实际上,您需要做的是将完整路径传递给应用程序。然后,您使用app.UsePathBase()
来配置该路径库,以便对其进行正确的解释:
location /app1/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:5000/app1/;
}
app.UsePathBase("/app1");
现在,在/app1/foo
处的传入请求将转换为应用程序中的相同路径,将使用/app1
路径库,并且~
应该正确扩展到/app1
。
答案 1 :(得分:0)
发现错误确实是在我的Nginx配置中。
按照此处有关asp和nginx的文档进行操作:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2
我将nginx配置更改为:
...
location /app1/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:5000;
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;
}
...
~
正确展开。