![](/img/trans.png)
[英]How to serve index.html static file from client-side within expressJS server?
[英]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.