![](/img/trans.png)
[英]Using nginx.ingress.kubernetes.io/rewrite-target gives “default backend - 404”
[英]how to use nginx.ingress.kubernetes.io/rewrite-target: in ingress-nginx
我在 Kubernetes 中运行节点微服务应用程序
我想要https://app.domain.com/vehicle/api/v1/...。 必须 go 到https://app.domain.com/api/v1/...。
如果我使用如下所示的重写目标注释,我的主页将变为空白,如您在此处看到的
如果我删除该注释,那么我的主页将按预期出现
这是我的入口 yaml 文件,带有重写注释
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-srv
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/proxy-connect-timeout: "360"
nginx.ingress.kubernetes.io/proxy-read-timeout: "360"
nginx.ingress.kubernetes.io/proxy-send-timeout: "360"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
tls:
- hosts:
- app.domain.com
secretName: app-ssl
defaultBackend:
service:
name: app-webapp-service
port:
number: 80
rules:
- host: app.domain.com
http:
paths:
- path: /vehicle(/|$)(.*)
pathType: Prefix
backend:
service:
name: app-vehicle-service
port:
number: 5001
- path: /*
pathType: Prefix
backend:
service:
name: app-webapp-service
port:
number: 80
这是我的 Dockerfile 用于 React(前端),如果需要做任何更改,请建议
FROM node:12.18.3 AS build
ENV CI=false
ENV WDS_SOCKET_PORT=0
WORKDIR /app
COPY ["package.json", "package-lock.json", "./"]
RUN npm install --production
COPY . .
RUN npm run build:development
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
COPY --from=build /app/nginx-custom.conf /etc/nginx/conf.d/default.conf
这是我的 nginx-custom.conf
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
}
如果需要在任何文件中进行任何更改,请提出建议
您将需要编写两个单独的清单,第一个用于套接字应用程序,另一个用于基于路径的路由。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-socket
annotations:
nginx.ingress.kubernetes.io/server-snippets: |
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_set_header Connection "upgrade";
proxy_cache_bypass $http_upgrade;
}
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.org/websocket-services: socket-svc-name
nginx.ingress.kubernetes.io/proxy-connect-timeout: "360"
nginx.ingress.kubernetes.io/proxy-read-timeout: "360"
nginx.ingress.kubernetes.io/proxy-send-timeout: "360"
spec:
ingressClassName: nginx
rules:
- host: app.domain.com
http:
paths:
- backend:
service:
name: socket-svc-name
port:
number: 80
path: /.*
pathType: Prefix
注意:在您的 LoadBalancer 侦听器配置中,它必须侦听 TCP/80、SSL/443 而不是 HTTP/80、HTTPS/443 并通过 TCP/SSL 协议而不是 HTTP/HTTPS 转发请求,因为 Socket 应用程序在 WSS 协议上运行。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-srv
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "Access-Control-Allow-Origin: *";
nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: PUT, GET, POST, OPTIONS, DELETE, PATCH
nginx.ingress.kubernetes.io/cors-allow-origin: '*'
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
ingressClassName: nginx
rules:
- host: app.domain.com
http:
paths:
- backend:
service:
name: app-vehicle-service
port:
number: 5001
path: /vehicle/api/v1/.*
pathType: Prefix
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.