代码之家  ›  专栏  ›  技术社区  ›  kentor

Nginx入口资源-从重定向到www(SSL不工作)

  •  3
  • kentor  · 技术社区  · 7 年前

    用例

    https://github.com/helm/charts/tree/master/stable/nginx-ingress

    我为我的前端服务Web服务器创建了一个入口资源,它应该从非www重定向到www版本。我也在使用SSL。

    问题

    当我访问我的网站的www版本时,一切都很好,nginx使用我的Lets Encrypt SSL证书(在正确的名称空间中作为机密存在)为页面提供服务。但是,当我访问网站的非www版本时,我在浏览器中看到了失败的SSL证书页(NET::ERR\u CERT\u AUTHORITY\u INVALID),可以看到该页是使用Kubernetes入口假证书提供的。我想这也是重定向到www版本根本不起作用的原因。

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: nginx
        kubernetes.io/tls-acme: "true"
        nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
      creationTimestamp: 2018-10-03T19:34:41Z
      generation: 3
      labels:
        app: nodejs
        chart: nodejs-1.0.1
        heritage: Tiller
        release: example-frontend
      name: example-frontend
      namespace: microservices
      resourceVersion: "5700380"
      selfLink: /apis/extensions/v1beta1/namespaces/microservices/ingresses/example-frontend
      uid: 5f6d6500-c743-11e8-8aaf-42010a8401fa
    spec:
      rules:
      - host: www.example.io
        http:
          paths:
          - backend:
              serviceName: example-frontend
              servicePort: http
            path: /
      tls:
      - hosts:
        - example.io
        - www.example.io
        secretName: example-frontend-tls
    

    问题

    nginx为什么不在非www版本上使用提供的证书呢?

    2 回复  |  直到 7 年前
        1
  •  5
  •   Rico    7 年前

    重定向的问题似乎与 this 在写这篇文章的时候还没有确定。但是,在同一链接上有一个解决方法:

    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($host = 'foo.com' ) {
        rewrite ^ https://www.foo.com$request_uri permanent;
      }
    
        2
  •  1
  •   kentor    7 年前

    我通过在规则中添加非www版本来修复它。重定向仍然不起作用,但是页面是使用正确的SSL证书提供的。

      - host: example.io
        http:
          paths:
          - backend:
              serviceName: example-frontend
              servicePort: http
            path: /