Kubernetes의 Nginx Ingress에서 리디렉션 작성

3371 단어
Kubernetes를 사용 중이며 www 웹 사이트를 www가 아닌 ​​웹 사이트로 리디렉션하거나 그 반대로 리디렉션하고 싶습니까? 이봐, 나도! 😃

저는 최근에 dictate.life 웹사이트를 다시 시작했고 배포를 계획하는 중에 처음에는 완전히 인식하지 못했던 몇 가지 간단한 요구 사항이 있음을 깨달았습니다.
  • 사람들이 https://www.dictate.life 또는 https://dictate.life (또는 심지어 http://dictate.life 을 통해 사이트에 액세스할 수 있기를 바랍니다!)
  • 웹사이트를 탐색하는 동안 주소 표시줄에 항상 www에 있음을 표시하고 싶습니다. 사이트 버전.

  • 나는 전통적인 Apache 또는 Nginx 환경에서 301 리디렉션을 사용하여 이러한 종류의 작업을 수행하는 데 익숙하지만 Kubernetes 환경에서 이를 수행하는 방법에 익숙하지 않았습니다. 내가 그것을 달성한 방법은 다음과 같습니다.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      namespace: default
      name: my-nginx-ingress
      annotations:
        ...other annotations...
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/configuration-snippet: |
          if ($host = 'myhost.com') {
            return 301 https://www.myhost.com$request_uri;
          }
    


    이 리디렉션의 장점은 요청을 루트 경로인/뿐만 아니라 다른 경로로 리디렉션한다는 것입니다. 따라서 누군가가 http://dictate.life/about 을 방문하면 올바른 HTTPS 활성화, www-toting 버전의 URL로 이동합니다 🎉

    이것이 쿠버네티스의 nginx 인그레스의 구성 스니펫 옵션을 사용하는 유일한 방법은 아닙니다. 위의 스니펫이 내 필요에 가장 적합하다는 것을 알았지만 사용자가 입력한 URL에 관계없이 항상 루트로 리디렉션하기를 원했다고 가정해 보겠습니다. URL이 일치하지 않는 새 웹사이트로 이동하는 경우 유용한 상황입니다. 이 경우 $request_uri 부분을 생략하면 됩니다.

    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($host = 'myhost.com') {
        return 301 https://www.myhost.com;
      }
    


    이것이 하나의 인그레스만 있다고 가정하고 구성 변경 사항을 하나의 인그레스에 적용하는 가장 좋은 방법입니다. Nginx ingress는 ConfigMaps를 사용하여 한 번에 여러 수신의 기본 구성을 변경하는 것도 지원합니다. 자세한 내용은 여기에서 확인할 수 있습니다. https://kubernetes.github.io/ingress-nginx/examples/customization/custom-headers/

    더 알고 싶으세요? 여기 뻔뻔한 플러그가 있습니다. 와서 제 코드를 보거나 제 Twitch 스트림에서 질문을 해주세요! https://www.twitch.tv/malgasm/

    원본 기사: https://malgasm.com/blog/32/write-redirects-in-kubernetes-nginx-ingress-how-to

    좋은 웹페이지 즐겨찾기