簡體   English   中英

nginx-ingress 將流量發送到 pod 中的 nginx 但不返回資產

[英]nginx-ingress sending traffic to nginx in pod but not returning assets

基本上,我很難讓nginx從位於子路徑/new-admin的 CRA Web 應用程序提供npm build

我確實在package.json "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;
  }
}

鑒於它提供index.html ,而不是 CSS 和 JS 資產,這似乎最接近正確。 它確實顯示在index.html ,這應該是正確的:

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

我還注意到當它啟動 Pod 時,它說,盡管它是從頭開始構建圖像。

[admin-new] /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
[admin-new] /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
[admin-new] /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
[admin-new] 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
[admin-new] 10-listen-on-ipv6-by-default.sh: error: /etc/nginx/conf.d/default.conf differs from the packaged version
[admin-new] /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
[admin-new] /docker-entrypoint.sh: Configuration complete; ready for start up

實際上,遇到了這個答案,這幾乎是我遇到的確切問題:

React & nginx 路由到子目錄

所以我最終的./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;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM