nginx入口将流量发送到pod中的nginx,但不返回资产

时间:2020-10-05 21:02:36

标签: docker nginx kubernetes nginx-location nginx-ingress

基本上,我很难从子路径nginx上的CRA Web应用程序中获取npm build来服务/new-admin

我确实在package.json的{​​{1}} "homepage": "/new-admin"<Route basename={process.env.PUBLIC_URL}>中。在开发中可以正常工作,但是现在我尝试制作一个暂存/生产副本,但我可以肯定,这是由于index.js造成的。在我尝试过的各种配置中,没有一个起作用,我要么得到:

  • ./nginx/default.conf
  • 500 Internal Server Error

这就是我所拥有的:

<Uncaught SyntaxError: Unexpected token '<'
# ingress.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.org/client-max-body-size: "500m"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^(/admin)$ $1/ permanent;
  name: ingress-service-dev-admin
  namespace: default
spec:
  rules:
    - http:
        paths:
          - path: /admin/?(.*)
            backend:
              serviceName: admin-old-cluster-ip-service-dev
              servicePort: 4000  
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^(/new-admin)$ $1/ permanent;
  name: ingress-service-dev
  namespace: default
spec:
  rules:
    - http:
        paths:
          - path: /new-admin/
            backend:
              serviceName: admin-new-cluster-ip-service-dev
              servicePort: 4001
          - path: /api/
            backend:
              serviceName: api-cluster-ip-service-dev
              servicePort: 5000
          - path: /
            backend:
              serviceName: client-cluster-ip-service-dev
              servicePort: 3000

此版本的# Dockerfile for /new-admin/ FROM node:13-alpine as builder WORKDIR /app COPY ./package.json ./ RUN npm install COPY . . RUN npm run build FROM nginx EXPOSE 4001 COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf COPY --from=builder /app/build /usr/share/nginx/html 产生default.conf

500 Internal Server Error

这是相关的# ./nginx/default.conf server { listen 4001; root /usr/share/nginx/html; index index.html index.htm; location /new-admin { try_files $uri $uri/ /new-admin/index.html; } } 日志:

nginx

此版本的结果为[admin-new] 2020/10/05 20:31:49 [error] 28#28: *9 rewrite or internal redirection cycle while internally redirecting to "/new-admin/index.html", client: 172.17.0.4, server: , request: "GET /new-admin/ HTTP/1.1", host: "192.168.64.5" [admin-new] 172.17.0.4 - - [05/Oct/2020:20:31:49 +0000] "GET /new-admin/ HTTP/1.1" 500 579 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" "192.168.64.1"

<Uncaught SyntaxError: Unexpected token '<'

鉴于它服务于# ./nginx/default.conf server { listen 4001; root /usr/share/nginx/html; index index.html index.htm; location / { try_files $uri $uri/ /index.html; } } ,而不是CSS和JS资源,这似乎最接近正确。它确实显示在index.html中,应该正确:

index.html

尽管它是从头开始构建图像的,但我也注意到它在启动Pod时说的话。

<script src="/new-admin/static/js/2.c6b4376b.chunk.js"></script>
<script src="/new-admin/static/js/main.c24347bf.chunk.js"></script>

1 个答案:

答案 0 :(得分:1)

实际上,遇到了这个答案,几乎就是我遇到的确切问题:

React & nginx routing to subdirectory

所以我的最终./nginx/default.conf看起来像这样:

server {
  listen 4001;
  root /usr/share/nginx/html;
  index index.html index.htm;

  location = /new-admin {
    try_files $uri $uri/ /index.html =404;
  }

  location ~ ^/new-admin(.*) {
    try_files $1 $1/ /index.html =404;
  }
}