Estou usando o IIS para reverter solicitações HTTP de proxy para um aplicativo nodejs em execução na mesma máquina.
Os módulos de reescrita de URL e ARR estão instalados e a configuração de proxy verificada. A correspondência de URL parece boa: se eu alterar a regra para redirecionar, funcionará conforme o esperado. Usando a reescrita, recebo um erro 404.
O ponto de extremidade da API é api.url.com/getContent/ofertas
. A pasta raiz do site IIS é W:\sites\LocalUser\site\api
. Aqui está o web.config
arquivo.
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="UrlRewriteLocalhost" enabled="true" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:8801/{R:1}" />
</rule>
</rules>
</rewrite>
<defaultDocument>
<files>
<remove value="index.htm" />
<remove value="index.html" />
</files>
</defaultDocument>
</system.webServer>
</configuration>
Tenho certeza de que no passado tive uma configuração semelhante em outra máquina com um web.config
arquivo semelhante. Eu resolvi problemas no passado (principalmente sobre FTP) usando procmon e aqui estão minhas descobertas:
Estes são os logs procmon quando acesso o URL com a regra de regravação versus redirecionamento. Observe que na regra de redirecionamento o web.config
arquivo é resolvido no caminho correto (seta vermelha). Com a regra de reescrita, parece que não pode ser resolvido para o caminho correto.
Erro 404 com a regra de reescrita
Além disso, se eu interpretar a descrição do erro corretamente, parece que não está encontrando um manipulador de arquivo apropriado, porque não há nenhum configurado. Além disso, olhando para o 'PhysicalPath', parece que está solicitando o caminho errado, o que faz sentido, apoiado pelos logs do procmon.
Eu li em algum lugar que a reescrita de URL vem antes da situação dos mapeamentos do manipulador, então isso significa que a reescrita de URL não está funcionando corretamente? Para onde eu vou depois daqui?
Bem, eu juro que estava tendo esse problema por mais de uma semana. Depois de postar a pergunta, revisei tudo de novo, verifiquei todos os recursos possíveis do IIS.
Uma coisa que me incomodou foi saber que o redirecionamento de URL estava funcionando, com a regra de redirecionamento, mas a reescrita, que precisa do ARR para funcionar, não.
Ao inspecionar o recurso 'Módulos', notei que havia uma entrada para o módulo de reescrita de URL,
RewriteModule
mas nenhuma sugerindo ARR. Fui em 'Ações' -> 'Configurar Módulos Nativos...' e lá estava oApplicationRequestRouting
módulo esperando ser marcado...Também segui este artigo da Microsoft e executei a etapa número 3. Não acho que faça parte da solução, mas achei que vale a pena mencionar.
Espero que isso ajude alguém!