首页 文章

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

提问于
浏览
3

Use case

我使用这个头盔图在我的Kubernetes集群中部署了nginx入口控制器:

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

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

The problem

当我访问我的网站的www版本时,一切都很好,nginx使用我的Lets Encrypt SSL证书(在正确的命名空间中作为秘密存在)提供页面 . 但是,当我访问网站的非www版本时,我在浏览器中获得了失败的SSL证书页面(NET :: ERR_CERT_AUTHORITY_INVALID),并且可以看到该页面是使用Kubernetes ingress假证书提供的 . 我认为这也是为什么重定向到www版本根本不起作用的原因 .

This is my ingress resource (actual hostnames have been redacted):

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

The question

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

2 回答

  • 2

    您似乎通过添加其他规则修复了接收无效证书的问题 .

    重定向的问题看起来与this有关,并且在撰写本文时并未修复 . 但是,在同一链接上描述了一种解决方法:

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

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

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

相关问题