我无法让我的 asp.net core 网站在 Kubernetes 中的 ngnix 入口 Controller 后面工作。我可以查看该网站,但所有链接、CSS 和图像均已损坏。
我的 Ingress Controller 如下所示
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: apps-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host:
http:
paths:
- path: /web(/|$)(.*)
backend:
serviceName: web-service
servicePort: 80
- path: /middle(/|$)(.*)
backend:
serviceName: middle-api-service
servicePort: 80
我还将我的网站配置为使用转发 header
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.All
});
我可以浏览到网站 {proxyaddress}/web
这会加载站点,但所有链接、CSS 和图像在转到根代理地址(没有为入口 Controller 配置的路径 /web
)时都会中断。
我确实输出了网站收到的 header ,我可以看到:
header X-Real-IP - val: 10.240.0.4
header X-Forwarded-For - val: 10.240.0.4
header X-Forwarded-Host - val: {ProxyAddress}
header X-Forwarded-Port - val: 443
header X-Forwarded-Proto - val: https
header X-Original-URI - val: /web/
header X-Scheme - val: https
我可以看到 header X-Original-URI
的值为 /web
我的网站需要将其用作所有链接的基础。
我尝试过app.UsePathBase("/web");
和
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedForHeaderName = "X-Original-URI",
OriginalForHeaderName = "X-Original-URI",
OriginalHostHeaderName = "X-Original-URI",
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
似乎没有任何效果,我在网上找不到任何关于我需要设置什么才能使网站在代理配置的 /web
路径下工作的信息?
最佳答案
我找到了答案,因为我使用的是基于 /web
的 nginx 代理的路径
您需要将路径保留为 /web
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: apps-ingress
labels:
name: apps-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host:
http:
paths:
- path: /web
backend:
serviceName: web
servicePort: 80
- path: /middle
backend:
serviceName: middle-api
servicePort: 80
然后在应用程序配置部分将路径基数配置为等于/web
。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (!String.IsNullOrEmpty(Configuration["PathBase"]))
app.UsePathBase(Configuration["PathBase"]);
我还必须向应用程序添加一个环境变量,以便可以配置 /web
,因为我无法访问 X-Original-URI
应用程序启动时的标题。
关于c# - 在 Kubernetes 中的 nginx 代理后面配置 .Net Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56838883/