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

时间:2018-10-12 17:45:15

标签: nginx kubernetes kubernetes-ingress nginx-ingress

用例

我使用以下头盔图表将nginx入口控制器部署到了Kubernetes集群中:

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

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

问题

当我访问我的网站的www版本时,一切都很好,nginx使用我的Lets Encrypt SSL证书(在正确的名称空间中以秘密形式存在)为页面提供服务。但是,当我访问该网站的NON-www版本时,在浏览器(NET :: ERR_CERT_AUTHORITY_INVALID)中看到失败的SSL证书页面,并且可以看到该页面使用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 个答案:

答案 0 :(得分:4)

好像您通过添加其他规则解决了接收无效证书的问题。

重定向问题似乎与this有关,并且在撰写本文时尚未解决。但是,在同一链接上有一种解决方法:

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

答案 1 :(得分:1)

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

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