Traefik을 사용하여 www가 아닌 곳에서 www로 리디렉션하는 방법
6531 단어 traefikdevopsarchitecturetooling
내 웹 사이트에 canonical link elements이 있고 동일한 웹 사이트가 두 도메인 모두에 대해 제공되었지만 이 작은 기능을 잃어버렸다는 것이 저를 괴롭혔습니다... 그래서 자연스럽게 Traefik으로 이 리디렉션을 구현하는 방법을 인터넷에서 검색하기 시작했습니다. 😇
불행히도 Traefik 커뮤니티는 과거에 비슷한 질문을 여러 번 했지만( 5425 , 6458 , 6813 , 8409 , 7428 , 8976 및 10711 솔루션을 제안한 적이 없습니다. 내 환경을 위해 일했습니다 ... 😢
대부분은
labels
로 새로운 미들웨어를 정의하지만, 저는 일부 사이트에만 적용할 수 있는 보다 글로벌한 솔루션을 찾고 있었습니다. 리다이렉트를 필요로 하는 모든 웹사이트의 리다이렉트를 해결하기 위해 새로운 미들웨어를 만드는 것은 그다지 효율적이지 않다고 생각했습니다... 🤔특히 솔루션이 모두 같지는 않았지만 서로 비슷했습니다.
- "traefik.http.middlewares.wwwtohttps.redirectregex.regex=^https?://(?:www\\.)?(.+)"
- "traefik.http.middlewares.wwwtohttps.redirectregex.replacement=https://$${1}"
- "traefik.http.middlewares.wwwtohttps.redirectregex.permanent=true"
그들 중 일부는 마침표를 두 번 이스케이프 처리하고(
\\.
), 일부는 마침표를 한 번만 이스케이프 처리하고( \.
), 나머지는 마침표를 이스케이프하지 않습니다( .
)... 이중 달러 기호( $${1}
and ${1}
)... 어느 것이 맞나요? 약간 혼란스럽죠? 😵그래서 여러 조합을 시도하기 시작했고 라이브 웹사이트를 몇 번 중단한 후 마침내 작동하게 되었습니다! 다음은 Traefik v2.5.1에서 작동하는 솔루션입니다. 🎉
해결책
위에서 말했듯이 dynamic configuration file에서 미들웨어를 한 번만 정의합니다.
# Traefik dynamic configuration file
# See https://doc.traefik.io/traefik/getting-started/configuration-overview/#the-dynamic-configuration
http:
middlewares:
# Redirect non-www URLs to their www equivalent
# Use with traefik.http.routers.myRouter.middlewares: "redirect-non-www-to-www@file"
redirect-non-www-to-www:
# Redirect a request from an url to another with regex matching and replacement
redirectregex:
# Apply a permanent redirection (HTTP 301)
permanent: true
# The regular expression to match and capture elements from the request URL
regex: "^https?://(?:www\\.)?(.+)"
# How to modify the URL to have the new target URL
replacement: "https://www.${1}"
# Redirect www URLs to their non-www equivalent
# Use with traefik.http.routers.myRouter.middlewares: "redirect-www-to-non-www@file"
redirect-www-to-non-www:
# Redirect a request from an url to another with regex matching and replacement
redirectregex:
# Apply a permanent redirection (HTTP 301)
permanent: true
# The regular expression to match and capture elements from the request URL
regex: "^https?://www\\.(.+)"
# How to modify the URL to have the new target URL
replacement: "https://${1}"
내 의견에서 이미 사용 방법을 보았을 수도 있지만
docker-compose.yml
파일에 새 레이블을 추가하기만 하면 됩니다. traefik.http.routers.myRouter.middlewares: "redirect-non-www-to-www@file"
라우터에 이미 미들웨어가 있는 경우
,
와 같이 쉼표( another-middleware,redirect-non-www-to-www@file
)로 구분하여 원하는 미들웨어를 추가하십시오.이제 웹사이트를 www 또는 non-www으로 리디렉션할 수 있습니다. 🤗
Reference
이 문제에 관하여(Traefik을 사용하여 www가 아닌 곳에서 www로 리디렉션하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/benjaminrancourt/how-to-redirect-from-non-www-to-www-with-traefik-24g9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)