Provavelmente estou perdendo algo óbvio - mas não sei o que é. E esta é provavelmente uma duplicata; Eu li centenas de perguntas aqui sobre reescritas do nginx - mas elas não parecem corresponder ao meu caso de uso.
O problema que estou tentando resolver é implementar uma solução alternativa para o CAS em que o aplicativo cliente informa ao CAS que a URL de retorno é HTTP quando na verdade é HTTPS. O lado do servidor estava conseguindo desembaraçar isso até que o Google decidiu lançar a v87, que fica chateada com os redirecionamentos https->http. Estou, portanto, tentando alterar a URL enviada ao CAS. Eu quero substituir "http" por "https" na consulta, por exemplo
https://cas.example.com/cas/login?service=http:%2F%2Fapp.example.com/
should be re-written as
https://cas.example.com/cas/login?service=https:%2F%2Fapp.example.com/
Aqui está minha configuração
location / {
## this one works....
# rewrite /foo/(.*) /$1 break;
## these don't....
# rewrite ^([^\?]+)\?service=http:(.*)$ $1?service=https:$2 break;
# rewrite ^([^\?]+)\?service=http%(.*)$ $1?service=https%$2 break;
rewrite /(.*)vice=http:(.*) /$1vice=https:$2 break;
rewrite /(.*)vice=http%(.*) /$1vice=https%$2 break;
rewrite /(.*)vice=http(.*) /colin.bip?f=$1vice=other$2 break;
rewrite /(.*)foo(.*) /$1bar$2 break;
(não há outros blocos de localização neste servidor).
Quando digo que os outros não funcionam, quero dizer que a URL não é alterada.
Os regexes parecem analisar a URL corretamente quando eu os testo em uma implementação PCRE separada, mas não parecem estar disparando na minha configuração do nginx.
ATUALIZADO Eu habilitei o log de reescrita - e as reescritas parecem ignorar a parte da consulta?
*1 "/(.*)foo(.*)" does not match "/url.php", client: 10.1.1.7, server: example.com, request: "GET /url.php?q=foo&service=http://hello HTTP/1.1"
Posso convencer o nginx a reescrever a consulta também?
De acordo com a atualização, os regexes de reescrita não são aplicados à parte de consulta da URL. Consegui resolver meu problema com:
(o '?' final após newqry suprime a adição da consulta original à URL).