【发布时间】:2017-02-07 15:08:35
【问题描述】:
我有一个通过 Kestrel 在 Linux 机器上运行的 .Net Core (MVC 6) Web 应用程序,NGINX 作为端口 80 -> 5000 的代理 不幸的是,我不允许使用默认路由,因为另一个应用程序具有优先级,两者都必须在端口 80 上运行,这意味着请求的转发方式如下:
127.0.0.1 -> 另一个应用程序
127.0.0.1/conf -> 我的应用
在 NGINX 配置文件中它被定义为:
location /conf {
proxy_pass http://127.0.0.1:5000;
proxy_cache_bypass $http_upgrade;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
}
问题是,如果我使用标准位置 ( location / ) 运行应用程序,MVC 应用程序的路由运行良好。但是将 /conf 附加到代理只会破坏 MVC 路由,因为应用程序会继续返回基于根位置的路由,而没有 /conf 前缀。因此,在用户进入默认登录页面后,所有路由(链接、操作)仍然指向 127.0.0.1/Home/About 这样的地址,而不是 127.0.0.1/conf/Home/About - 更糟糕的是,这些链接(/conf/Home/About) 也不起作用。
关于我应该如何解决这个问题的任何建议?是否应该在通用级别的 MVC 应用程序中指定一些路由前缀(目前它仅使用默认路由)还是有一些基于 NGINX 的解决方案(这将是更可取的)? 我用谷歌搜索了半天,没有找到类似的情况,所以我非常感谢您对此的任何意见。
谢谢!
【问题讨论】:
标签: nginx proxy routing asp.net-core-mvc