reactjs - 还是要使用npm start从带有前缀的网址(例如/client/static)中转换/static?

标签 reactjs docker kubernetes create-react-app nginx-ingress

我已经为此工作了一段时间,似乎什么也做不了。

基本上,我有一个微服务的入口 Controller ,其URL为:

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

但是,当我导航到192.168.64.4/client(这是minikube ip)时,我什么也看不到,因为用于静态文件的URL npm start/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
    

    关于reactjs - 还是要使用npm start从带有前缀的网址(例如/client/static)中转换/static?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59832144/

    相关文章:

    docker - Kafka 监听器在融合的 kubernetes 设置中是错误的

    javascript - 从 UI 触发批处理文件

    reactjs - Azure 应用服务中没有为静态文件注册路由

    javascript - React-Three-Renderer 引用在 componentDidUpdate 中不是当前的(包括 MVCE)

    build - Docker自动化构建导致意外失败

    docker - 主机名和服务名有什么区别?

    kubernetes - 是否有可能使kubernetes入口treafik适用于所有 namespace

    javascript - 如何用material-ui设置时钟(timePicker)的颜色?

    docker - 如何使用 gpg key 解密 docker 容器中的文件而不将其保存在镜像中?

    kubernetes - 如何在 Openshift 中更新 Secrets(不删除和创建)?