웹사이트가 있어요http://blahblah.com 로그인 페이지를 추가하기 전에 로그인 페이지를 추가하고 싶습니다.http://blahblah.com. PHP로 간단한 로그인 코드를 작성했습니다. 문제는 blahblah 의 코드를 수정할 수 없다는 것입니다. 일부 마이크로서비스는 Rust 및 기타 언어로 작성되었습니다.
login.php에서 필요에 따라 blahblah.com으로 리디렉션할 수 있습니다. 사람들이 blahblah.com에 오면 haproxy가 my-login.com으로 리디렉션되도록 강제할 수 있다는 것을 알고 있습니다. 그런 다음 my-login.com에서 blahblah.com으로 리디렉션할 수 있지만 이것이 서클로 끝날 수 있습니다.
누군가 이 작업을 수행하기 위해 haproxy 구성이 어떠해야 하는지에 대한 도움/팁을 줄 수 있습니까?
답변1
HAProxy는 이를 위한 최고의 도구는 아닐 수 있지만 아키텍처와 사용법을 더 잘 이해하지 않고서는 말하기 어렵습니다. 어쨌든 방법 중 하나는 map
함수를 사용하여 올바른 백엔드를 선택하는 것입니다.
보다https://www.haproxy.com/blog/introduction-to-haproxy-maps/하지만 대략적으로 다음과 같은 작업을 수행하게 됩니다.
frontend frontend-blahblah
bind *:443
use_backend %[req.hdr(x-app-auth),map(/mnt/resource/token.map,backend-unauth)]
맵 파일에는 각각 백엔드(예: blahblah.com) /mnt/resource/token.map
에 매핑되는 인증 키 목록이 있습니다 . backend-auth
인증 키가 없는 사람은 누구나 backend-unauth
로그인 서버로 전송됩니다.
추가로 다음을 수행해야 합니다.
X-App-Auth
이 예에서는 앱이 각 요청과 함께 헤더를 보내야 합니다 . 또는 대신 쿠키를 사용하도록 변경하십시오req.cook(APPAUTH)
.- 사용자가 로그인하거나 로그아웃하면
/mnt/resource/token.map
로그인 서버에서 지도 파일을 업데이트해야 합니다. 이를 수행하는 여러 가지 방법은 위에 참조된 문서를 참조하세요. 아마도 가장 쉬운 방법은 로그인 서버의 IP를 사용http-request set-map
하고http-request del-map
이에 대한 액세스를 제한하는 것입니다. 예를 들어 HAProxy가 별도의 '관리 포트'에서 수신 대기하고 다른 IP 및 기타 보안의 요청을 거부하도록 하는 것입니다. 예를 들어, 로그인 서버가 다음을 호출할 수 있습니다.https://blahblah.com:8443/add-token/123456789... 인증키를 추가하려면 - 로그인 서버는 쿠키 설정/인증 키를 클라이언트에 반환하는 작업을 처리해야 합니다. 일부 HAProxy 헤더 조정이 필요할 수 있음을 의미하는 일부 교차 사이트 문제가 있을 수 있습니다. 당신은 이미 그 문제를 고려하고 해결했을 수도 있습니다.
이 모든 것은 무뚝뚝한 도구입니다. 사용자가 로그인하고 사이트에 액세스할 수 있는 권한이 있는지 여부입니다. 사용자를 구분하는 세분성이 많지 않습니다. 원한다면 로그인 서버를 다른 사이트 앞에 프록시로 두는 것이 더 나을 수 있습니다.