簡體   English   中英

無論如何使用 npm start 從帶前綴的 URL(例如 /client/static)服務 /static ?

[英]Anyway to serve /static from a prefixed URL (e.g. /client/static) with npm start?

我已經為此工作了一段時間,但似乎無濟於事。

基本上,我有一個微服務的入口控制器,其 URL 為:

- path: /client/?(.*)
  backend:
    serviceName: client-cluster-ip-service
    servicePort: 3000

但是,當我導航到192.168.64.4/client (這是minikube ip )時,我沒有看到任何東西,因為npm start用於靜態文件的 URL 是/static 我需要將其更改為/client/static

那可能嗎?

我知道homepage: "/client"不是一個選項,因為它僅用於生產。 這是在 CRA 中,所以我想避免彈出它。

編輯:

添加了我當前的ingress.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
  name: ingress-service
  namespace: default
spec:
  rules:
    - http:
        paths:
          - path: /client/?(.*)
            backend:
              serviceName: client-cluster-ip-service
              servicePort: 3000
          - path: /api/?(.*)
            backend:
              serviceName: server-cluster-ip-service
              servicePort: 5000

/api路由工作正常,因為 Django 有一種內置的方式來處理前綴路徑。 如果不這樣做,它將無法正確提供static文件,特別是對於admin門戶:

FORCED_SCRIPT_NAME = '/api'
STATIC_URL = '/api/static/'

ReactJS,顯然不在開發中 您可以手動導航到/client/static/js/bungle.js並在那里查看.js 所以/client需要以某種方式作為/static/路徑的前綴。

我確實嘗試更改以下內容:

nginx.ingress.kubernetes.io/rewrite-target: /$2

這造成了一些奇怪的行為。

  • /client上,仍然是同樣的問題,但無法在任何位置找到/static文件(例如, /client/static/static等)
  • /api上,無論有沒有FORCE_SCRIPT_NAME ,都無法讓它提供任何服務。 入口正在進入 Django,但說它無法匹配任何路由,這非常奇怪。

在你的入口定義中使用重寫注釋,我認為在你的情況下它會是這樣的:

annotations:
  nginx.ingress.kubernetes.io/rewrite-target: /$2

$2 被匹配的捕獲 (.*) 替換,然后如果您嘗試訪問 /client/static ,結果重寫將是 /static ...這在理論上應該可行,試一試! 如果這不起作用讓我知道試圖找出原因

這也是我的資源的類似定義,與您的情況不完全相同,但我正在使用重寫並且它在這里工作。

apiVersion: v1
kind: Ingress
metadata:
  name: proxy-ingress
  namespace: repoflow-s3-proxy-demo
annotations:
  nginx.ingress.kubernetes.io/rewrite-target: /resources.repoflow.com/resources/$2
  nginx.ingress.kubernetes.io/upstream-vhost: s3.amazonaws.com
spec:
  rules:
  - host: s3-proxy.repoflow.com
    http:
      paths:
        - path: /resources(/|$)(.*)
          backend:
            serviceName: resources-external-service
            servicePort: 80

暫無
暫無

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

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