Esse comportamento provavelmente resulta do fato de que, por padrão, o CloudFront define o cabeçalho de solicitação Host: HTTP como o nome de host de origem, neste caso, elb.example.com. A aplicação, então, presumivelmente, gera links com base nesse nome de host.
Se, em vez disso, você configurar o CloudFront para whitelist esse cabeçalho para encaminhamento para a origem, o cabeçalho do host enviado pelo navegador (example.com) será enviado para o aplicativo pelo CloudFront, portanto, o aplicativo deve se comportar mais como você esperaria e usaria esse valor ao gerar os links. Com isso, o CloudFront ainda usa o nome de host do servidor de origem para fazer a pesquisa de DNS necessária para estabelecer a conexão TCP com a origem (o ELB nesse caso), mas para injetar esse nome de host nos cabeçalhos de solicitação HTTP.
Isso foi respondido por @ michael-sqlbot em SO